jboot is a similar springboot project base on jfinal and undertow,we have using in product environment.
jboot是一个基于jfinal、undertow开发的一个类似springboot的开源框架, 我们已经在正式的商业上线项目中使用。她集成了代码生成,微服务,MQ,RPC,监控等功能, 开发者使用及其简单。
not yet upload to maven center,you can clone source and deploy to you private warehouse.
<dependency>
<groupId>io.jboot</groupId>
<artifactId>jboot</artifactId>
<version>1.0</version>
</dependency>
new a controller
@UrlMapping(url="/")
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:8088
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.getJbootmq().publish(yourObject, toChannel);
server b message listener
Jboot.getJbootmq().addMessageListener(new JbootmqMessageListener(){
@Override
public void onMessage(String channel, Object obj) {
System.out.println(obj);
}
}, channel);
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(export = HelloService.class)
public class myHelloServiceImpl extends JbootService implements HelloService {
public String hello(String name){
System.out.println("hello" + name);
return "hello ok";
}
}
server b call
HelloService service = Jboot.service(HelloService.class);
service.hello("michael");
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.getJbootCache().put("cacheName", "key", "value");
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 {
public static find User DAO = new User();
public User findById(String id){
return DAO.findById(id);
}
public List<User> findByNameAndAge(String name,int age){
return DAO.findListByColums(Columns.create().like("name","%"+name+"%").gt("age",age));
}
}
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);
}
}
}
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);
}
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>
<jvmSettings>
<extraArguments>
<extraArgument>-server</extraArgument>
<extraArgument>-Xmx2G</extraArgument>
<extraArgument>-Xms2G</extraArgument>
</extraArguments>
</jvmSettings>
</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
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
- undertow
- name:yangfuhai
- qq:1506615067
- email:[email protected]