Giter VIP home page Giter VIP logo

jboot's Introduction

jboot

jboot is a similar springboot project base on jfinal and undertow,we have using in product environment.

jboot 中文描述

jboot是一个基于jfinal、undertow开发的一个类似springboot的开源框架, 我们已经在正式的商业上线项目中使用。她集成了微服务,MQ,RPC,监控(使用了Hystrix和 Metrics)、访问隔离、容错隔离、延迟隔离、 熔断、代码生成等功能,开发者使用及其简单,同时保证分布系统的高效和稳定。

QQ交流群: 601440615

jboot demo

https://github.com/yangfuhai/jbootdemo

maven dependency

<dependency>
    <groupId>io.jboot</groupId>
    <artifactId>jboot</artifactId>
    <version>1.0-alpha3.1</version>
</dependency>

controller example

new a controller

@RequestMapping("/")
public class MyController extend JbootController{
   public void index(){
        renderText("hello jboot");
   }
}

start

public class MyStarter{
   public static void main(String [] args){
       Jboot.run(args);
   }
}

visit: http://127.0.0.1:8080

mq example

config jboot.properties

#type default redis (support: redis,activemq,rabbitmq,hornetq,aliyunmq )
jboot.mq.type = redis
jboot.mq.redis.address = 127.0.0.1
jboot.mq.redis.password =
jboot.mq.redis.database =

server a sendMqMessage

 Jboot.getMq().publish(yourObject, toChannel);

server b message listener

Jboot.getMq().addMessageListener(new JbootmqMessageListener(){
        @Override
        public void onMessage(String channel, Object obj) {
           System.out.println(obj);
        }
}, channel);

rpc example

config jboot.properties

#type default motan (support:local,motan,grpc,thrift)
jboot.rpc.type = motan
jboot.rpc.requestTimeOut
jboot.rpc.defaultPort
jboot.rpc.defaultGroup
jboot.rpc.defaultVersion
jboot.rpc.registryType = consul
jboot.rpc.registryName
jboot.rpc.registryAddress = 127.0.0.1:8500

define interface

public interface HelloService {
    public String hello(String name);
}

server a export serviceImpl

@JbootrpcService
public class myHelloServiceImpl  implements HelloService {
    public String hello(String name){
         System.out.println("hello" + name);
         return "hello ok";
    }
}

download consul and start (consul:https://www.consul.io/)

consul -agent dev

server b call

 HelloService service = Jboot.service(HelloService.class);
 service.hello("michael");

or server b controller

public class MyController extends bootController{
    
    @JbootrpcService
    HelloService service ;
    
    public void index(){
        
        renderText("hello " + service.hello());
    }
    
}

cache example

config jboot.properties

#type default ehcache (support:ehcache,redis,ehredis (ehredis:tow level cache,ehcache level one and redis level tow))
jboot.cache.type = redis
jboot.cache.redis.address =
jboot.cache.redis.password =
jboot.cache.redis.database =

use cache

Jboot.getCache().put("cacheName", "key", "value");

database access example

config jboot.properties

#type default mysql (support:mysql,oracle,db2...)
jboot.datasource.type=
jboot.datasource.url=
jboot.datasource.user=
jboot.datasource.password=
jboot.datasource.driverClassName=
jboot.datasource.connectionInitSql=
jboot.datasource.cachePrepStmts=
jboot.datasource.prepStmtCacheSize=
jboot.datasource.prepStmtCacheSqlLimit=

define model

@Table(tableName = "user", primaryKey = "id")
public class User extends JbootModel<User> {
	
}

dao query

public class UserDao extends JbootDaoBase {
    public static find User DAO = new User();
    
    public User findById(String id){
        return DAO.findById(id);
    }
    
    public List<User> findByNameAndAge(String name,int age){
        
       Columns columns = Columns.create()
                        .like("name","%"+name+"%")
                        .gt("age",age);
        
        return DAO.findListByColums(columns);
    }
}

event example

send event

Jboot.sendEvent(actionStr,  dataObj)

event listener

@EventConfig(action = {User.ACTION_ADD,User.ACTION_DELETE})
public class MyEventListener implements JbootEventListener {
    
    public  void onMessage(JbootEvent event){
        
        if(event.getAction.equals(User.ACTION_ADD)){
            System.out.println("new user add, user:"+event.getData);
        }else if(event.getAction.equals(User.ACTION_DELETE)){
            System.out.println("user deleted, user:"+event.getData);
        }
        
    }
    
}

read config

config jboot.properties

jboot.myconfig.user = aaa
jboot.myconfig.password = bbb

define config model

@PropertieConfig(prefix = "jboot.myconfig")
public class MyConfig {

    private String name;
    private String password;
    
    // getter and setter
}

get config model

    MyConfig config = Jboot.config(MyConfig.class);
    System.out.println(config.getName());

code generator

  public static void main(String[] args) {

        String modelPackage = "io.jboot.test";

        String dbHost = "127.0.0.1";
        String dbName = "yourDbName";
        String dbUser = "root";
        String dbPassword = "";

        JbootModelGenerator.run(modelPackage, dbHost, dbName, dbUser, dbPassword);

    }

build

config pom.xml

 <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>


            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>appassembler-maven-plugin</artifactId>
                <version>1.10</version>
                <configuration>


                    <assembleDirectory>${project.build.directory}/app</assembleDirectory>
                    <repositoryName>lib</repositoryName>
                    <binFolder>bin</binFolder>
                    <configurationDirectory>webRoot</configurationDirectory>
                    <copyConfigurationDirectory>true</copyConfigurationDirectory>
                    <configurationSourceDirectory>src/main/resources</configurationSourceDirectory>
                    <repositoryLayout>flat</repositoryLayout>
                    <encoding>UTF-8</encoding>
                    <logsDirectory>logs</logsDirectory>
                    <tempDirectory>tmp</tempDirectory>

                    <programs>
                        <program>
                            <mainClass>io.jboot.Jboot</mainClass>
                            <id>jboot</id>
                            <platforms>
                                <platform>windows</platform>
                                <platform>unix</platform>
                            </platforms>
                        </program>
                    </programs>
                </configuration>
            </plugin>

        </plugins>

    </build>

maven build

mvn package appassembler:assemble

start app

cd yourProjectPath/target/app/bin
./jboot

start app and change config

cd yourProjectPath/target/app/bin
./jboot --jboot.server.port=8080 --jboot.rpc.type=local

use your properties replace jboot.properties

cd yourProjectPath/target/app/bin
./jboot --jboot.model=dev --jboot.server.port=8080

use jboot-dev.proerties replace jboot.properties and set jboot.server.port=8080

thanks

rpc framework:

mq framework:

  • activemq
  • rabbitmq
  • redis mq
  • hornetq
  • aliyun mq

cache framework

  • ehcache
  • redis

core framework:

author

donate

jboot's People

Contributors

yangfuhai avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.