# jboot **Repository Path**: istyle/jboot ## Basic Information - **Project Name**: jboot - **Description**: jboot是一个基于jfinal、undertow开发的一个类似springboot的开源框架, 我们已经在正式的商业上线项目中使用。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 948 - **Created**: 2017-07-03 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # jboot jboot is a similar springboot project base on jfinal and undertow,we have using in product environment. # jboot 中文描述 jboot是一个基于jfinal、undertow开发的一个类似springboot的开源框架, 我们已经在正式的商业上线项目中使用。她集成了权限控制(shiro)、微服务,MQ,RPC,监控(使用了Hystrix和 Metrics)、访问隔离、容错隔离、延迟隔离、 熔断、代码生成等功能,开发者使用及其简单,同时保证分布系统的高效和稳定。 QQ交流群: 601440615 # jboot demo https://github.com/yangfuhai/jbootdemo # maven dependency ```xml io.jboot jboot 1.0-alpha5 ``` # controller example new a controller ```java @RequestMapping("/") public class MyController extend JbootController{ public void index(){ renderText("hello jboot"); } } ``` start ```java public class MyStarter{ public static void main(String [] args){ Jboot.run(args); } } ``` visit: http://127.0.0.1:8080 # mq example config jboot.properties ```java #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 ```java Jboot.getMq().publish(yourObject, toChannel); ``` server b message listener ```java Jboot.getMq().addMessageListener(new JbootmqMessageListener(){ @Override public void onMessage(String channel, Object obj) { System.out.println(obj); } }, channel); ``` # rpc example config jboot.properties ```java #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 ```java public interface HelloService { public String hello(String name); } ``` server a export serviceImpl ```java @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/) ```java consul -agent dev ``` server b call ```java HelloService service = Jboot.service(HelloService.class); service.hello("michael"); ``` or server b controller ```java public class MyController extends bootController{ @JbootrpcService HelloService service ; public void index(){ renderText("hello " + service.hello()); } } ``` # cache example config jboot.properties ```java #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 ```java Jboot.getCache().put("cacheName", "key", "value"); ``` # database access example config jboot.properties ```java #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 ```java @Table(tableName = "user", primaryKey = "id") public class User extends JbootModel { } ``` dao query ```java public class UserDao extends JbootDaoBase { public static find User DAO = new User(); public User findById(String id){ return DAO.findById(id); } public List findByNameAndAge(String name,int age){ Columns columns = Columns.create() .like("name","%"+name+"%") .gt("age",age); return DAO.findListByColums(columns); } } ``` # event example send event ```java Jboot.sendEvent(actionStr, dataObj) ``` event listener ```java @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 ```java jboot.myconfig.user = aaa jboot.myconfig.password = bbb ``` define config model ```java @PropertieConfig(prefix = "jboot.myconfig") public class MyConfig { private String name; private String password; // getter and setter } ``` get config model ```java MyConfig config = Jboot.config(MyConfig.class); System.out.println(config.getName()); ``` # code generator ```java 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 ```xml org.apache.maven.plugins maven-compiler-plugin 1.8 1.8 org.codehaus.mojo appassembler-maven-plugin 1.10 ${project.build.directory}/app lib bin webRoot true src/main/resources flat UTF-8 logs tmp io.jboot.Jboot jboot windows unix ``` maven build ```java mvn package appassembler:assemble ``` # start app ```java cd yourProjectPath/target/app/bin ./jboot ``` start app and change config ```java cd yourProjectPath/target/app/bin ./jboot --jboot.server.port=8080 --jboot.rpc.type=local ``` use your properties replace jboot.properties ```java 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: * motan(https://github.com/weibocom/motan) * grpc(http://grpc.io) * thrift(https://github.com/apache/thrift) mq framework: * activemq * rabbitmq * redis mq * hornetq * aliyun mq cache framework * ehcache * redis core framework: * jfinal (https://github.com/jfinal/jfinal) * undertow (https://github.com/undertow-io/undertow) * guice (https://github.com/google/guice) * metrics (https://github.com/dropwizard/metrics) * hystrix (https://github.com/Netflix/Hystrix) * shiro (https://github.com/apache/shiro) # author * name:michael yang * qq:1506615067 * email:fuhai999@gmail.com # donate ![](https://camo.githubusercontent.com/6e46a604bca1a81c26d4f7972e3ab45ca50b9405/687474703a2f2f3778763978702e636f6d312e7a302e676c622e636c6f7564646e2e636f6d2f7a7a2e6a7067)