类似Spring Boot的开源框架jboot

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,监控等功能, 开发者使用及其简单。

maven dependency

<dependency>
    <groupId>io.jboot</groupId>
    <artifactId>jboot</artifactId>
    <version>${last_version}</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:8088

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 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");

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 {
    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));
    }
}

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>

                   </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:

  • motan
  • grpc
  • thrift

mq framework:

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

cache framework

  • ehcache
  • redis

core framework:

  • jfinal
  • undertow

author

  • name:yangfuhai
  • qq:1506615067
  • email:fuhai999@gmail.com

文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-09-14 14:51:45

类似Spring Boot的开源框架jboot的相关文章

【spring boot】8.spring boot的日志框架logback使用

 在继续上一篇的Debug调试之后,把spring boot的日志框架使用情况逐步蚕食. 参考:http://tengj.top/2017/04/05/springbo 开篇之前,贴上完整application.properties日志相关配置   ============================================================================================= 简介:spring boot的默认日志框架Logback SL

spring boot 实战:我们的第一款开源软件

在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来看开源软件的,你给我扯什么信息干嘛,别着急,听我慢慢道来.   背景 浏览器收藏夹应该是我们在收藏文章.网站的第一个利器,平时遇到喜欢的网站或者文章很方便的收藏到收藏夹中:很快我们的收藏夹就满了,于是就像我这样,创建文件夹来分组两层.三层都有: 有的也会借助百度首页导航这样的一些功能来整理自己收藏的网站,以前我记得QQ还有

Struts VS Spring 两种MVC框架比较

比较 基于Web的MVC framework在J2EE的世界内已是空前繁荣.TTS网站上几乎每隔一两个星期就会有新的MVC框架发布.目前比较好的MVC,老牌的有Struts.Webwork.新兴的MVC 框架有Spring MVC.Tapestry.JSF等.这些大多是著名团队的作品,另外还有一些边缘团队的作品,也相当出色,如Dinamica.VRaptor等.这些框架都提供了较好的层次分隔能力.在实现良好的MVC 分隔的基础上,通过提供一些现成的辅助类库,同时也促进了生产效率的提高. 如何选择

对于Struts和Spring两种MVC框架的比较

比较 基于Web的MVC framework在J2EE的世界内已是空前繁荣.TTS网站上几乎每隔一两个星期就会有新的MVC框架发布.目前比较好的MVC,老牌的有Struts.Webwork.新兴的MVC框架有Spring MVC.Tapestry.JSF等.这些大多是著名团队的作品,另外还有一些边缘团队的作品,也相当出色,如Dinamica.VRaptor等.这些框架都提供了较好的层次分隔能力.在实现良好的MVC 分隔的基础上,通过提供一些现成的辅助类库,同时也促进了生产效率的提高. 如何选择一

【spring boot logback】日志使用自定义的logback-spring.xml文件后,application.properties中关于日志的相关配置还会起作用么

本篇 将针对[日志使用自定义的logback-spring.xml文件后,application.properties中关于日志的相关配置还会起作用么]这一个主题进行探索. 这个测试项目是根据[spring boot]8.spring boot的日志框架logback使用中建立的项目进行测试的 在配置了logback-spring.xml 这个logback自定义的配置文件之后: <?xml version="1.0" encoding="UTF-8"?>

深入学习微框架:Spring Boot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以 及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. 多年以来,Spring IO平台饱受非议的一点就是大量的XML配置以及复杂的依赖管理.在去年的SpringOne 2GX会议上,Pivotal的CTO Adrian Co

使用Spring Boot日志框架在已有的微服务代码中添加日志功能

引言:我们需要在已有的微服务代码中添加日志功能,用于输出需要关注的内容,这是最平常的技术需求了.由于我们的微服务代码是基于SpringBoot开发的,那么问题就转换为如何在Spring Boot应用程序中输出相应的日志. 在传统Java应用程序中,我们一般会使用类似Log4j这样的日志框架来输出日志,而不是直接在代码中通过System.out.println()来输出日志.为什么要这么做呢?原因有两点.其一,我们希望日志能输出到文件中,而不是输出到应用程序的控制台中,这样更加容易收集和分析.其二

使用 Spring Boot 快速构建 Spring 框架应用,PropertyPlaceholderConfigurer

Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2002 年发布以来,Spring 框架已经成为企业应用开发领域非常流行的基础框架.有大量的企业应用基于 Spring 框架来开发.Spring 框架包含几十个不同的子项目,涵盖应用开发的不同方面.如此多的子项目和组件,一方面方便了开发人员的使用,另外一个方面也带来了使用方面的问题.每个子项目都有一定的学习曲线.开发人员需要了解这些子项目和组件的具体细节,才能知道如何把这些子项目整合起来形成一个完整的解决方案.在如何使用这些组件上

微框架Spring Boot详解

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新 Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从 而使开发人员不再需要定义样板化的配置.通过这种方式,Boot致力于在蓬勃发 展的快速应用开发领域(rapid application development)成为领导者. 多年以来,Spring IO平台饱受非议的一点就是大量的XML配置以及复杂的依赖 管理.在去年的SpringOne 2GX会议上,Pivotal的CTO Adrian