Jboot v3.4.0 发布,重大版本更新,全新模块和文档地址

Jboot 是一个基于 JFinal、JFinal-Undertow、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等开发的微服务框架,帮助开发者降低微服务开发门槛。同时完美支持在 idea、eclipse 下多 maven 模块,对 java 代码、html、css、js 等资源文件进行热加载。爽爽开发,快乐生活。

在 Jboot  v3.4.0 发布,直接从 v3.3.6 跳过来了,最为主要的原因是 Jboot 新增了一个全新的组件:AttachmentContainer。

AttachmentContainer 的主要作用,是用来 “存放” 附件的,当用户使用 JBoot 进行开发的时候,可以自定义多个 AttachmentContainer,方便把用户上传过来的文件存放在多个位置,比如:存放本地和阿里云OSS。当用户对附件进行附件数据请求的时候,我们亦可以用指定的 AttachmentContainer 进行渲染反馈。

在 Jboot Fatjar 中,Jboot 的处理方案 和 SpringBoot 完全不同,Jboot 是使用了 apache 的 maven-assembly-plugin 插件直接进行打包,启动是直接爆了 java main 方法,没有什么弯弯绕绕,极大的提高了性能。

同时,我们编写的 WEB 应用,可以按照我们的意愿,对项目进行 fatjar tomcat undertow 等不同的打包方式,其不用修改任何代码并其不同的打包方式,所运行生产的数据格式、目录位置都是一模一样的。这样带来一个巨大的好处是,我们的项目可以随时在 fatjar/tomcat/undertow 等不同的方案下随时切换,程序运行过程中产生的数据(附件等)直接复制到另一个容器直接运行。在方案迁移上给我们节约了大量的成本。

 

同时:Jboot 也带来了全新的文档,分别托管在 gitee page 和 github上。

访问地址:http://jboot.io (这个放在github上,会有点慢)

国内镜像:http://jbootprojects.gitee.io/docs

 

目前已经开源超过了 3 年的时间,迭代了 100+ 个版本,已经被超过 1000+ 公司在使用。

Jboot 主要有以下特征:

  • 1、基于 JFinal 的 MVC + ORM 快速开发。

  • 2、基于 ShardingSphere + Seata 分布式事务 和 分库分表。

  • 3、基于 Dubbo 或 Motan 的 RPC 实现

  • 4、基于 Sentinel 的分布式限流和降级

  • 5、基于 Apollo 和 Nacos 的分布式配置中心

  • 6、基于 EhCache 和 Redis 的分布式二级缓存

Jboot v3.4.0  更新内容如下:

  • 新增:门户网关 Gateway 新增自定义负载均衡策略的支持

  • 新增:AttachmentContainer 组件,方便自定义把附件上传到其他第三方任何平台

  • 新增:全新的文档地址 和 Jboot 官网

  • 修复:数据源 Datasource 的 validationQuery 属性配置不生效的问题

  • 修复:SqlDebugPrinter 对参数为 Boolean 数据输出的格式不正确的问题

  • 优化:升级 Sentinal、Metrics、JFinal-Weixin 等到最新版本

  • 优化:删除 JbootActionReporter 一些不必要的方法

  • 优化:删除一些不必要的 注释信息

  • 优化:修改 JbootPaginateDirective 自动去获取当前的 page 信息,而不需配置

  • 优化:移除 JbootHttpImpl 默认的 content-type 配置

  • 优化:重构 Metrics 读取的相关处理,在 Metrics 未配置的时候,没必要添加相关 Handler,提升性能

 

maven 依赖:

<dependency>
    <groupId>io.jboot</groupId>
    <artifactId>jboot</artifactId>
    <version>3.4.0</version>
</dependency>

Hello World:

@RequestMapping("/")
public class HelloworldController extends JbootController {    
    public void index(){
        renderText("hello world");
    }    
    public static void main(String[] args){
        JbootApplication.run(args);
    }
}

 


评论区

蓝动

2020-09-02 11:08

zzutligang

2020-09-02 11:14

@RequestMapping("/")这个注解,用不用提前注册路由?一直都想JFinal能有不用注册路由,直接用这个注解定义路由。波总给的反馈是消耗时间。不过有时候额外定义个路由还是有必要的。

海哥

2020-09-02 11:18

@zzutligang @RequestMapping("/") 不用提前注册路由了,这个注解就是注册路由了,这种方案 在 应用启动的时候,多消耗几毫秒的时间,启动完成之后, 0 消耗。

海哥

2020-09-02 11:19

@zzutligang 同时,这个文章里给出的 helloworld 就是完整代码了,不需要再做其他任何的配置。

小猪贝

2020-09-02 16:24

好用吗

zzutligang

2020-09-02 17:28

@海哥 能不能把@RequestMapping("/") 这个注解代码开源?我一直想要这个东西。启动就算多消耗3,2秒都不是问题的。

zzutligang

2020-09-02 17:48

@海哥 我知道了这个文件RequestMapping.java,这个文件只是定义了注解的接口,实现代码没知道。指点一下吧。我想把这个功能抽出来。

海哥

2020-09-04 11:00

@zzutligang 第一步:复制 Jboot里的 ClassScanner 到你自己的项目里,第二步:通过 ClassScanner 的方法去扫描到所有带上 @ RequestMapping 的类,然后主动在 Config 里添加。

海哥

2020-09-04 11:00

@zzutligang Jboot 所有源代码都是开源的。

zzutligang

2020-09-04 17:37

@海哥 Git clone下来后,把代码读了一遍,找到实现方法了,已经把@ RequestMapping注解移植过来了,现在可以用了。

zzutligang

2020-09-07 09:14

@海哥 我在其他网站上看到jboot介绍,说引用了Hystrix实现限流和熔断,但代码里没搜到这个关键字,请问jboot里有这个技术点的使用嘛?

海哥

2020-09-09 17:51

@zzutligang Hystrix 没有更新,jboot 已经换成 sentinel 了

zzutligang

2020-09-10 12:12

@海哥 再请教一下,我看jboot里的sentinel封装,是不是在需要做熔断的controller里引用SentinelInterceptor这个拦截器就行了是吧。其他的都不用管了。是这样的吗?

海哥

2020-09-12 16:46

@zzutligang 拦截器都不用,支架使用注解 @SentinelResource 来给 Controller 进行定义就可以了

zzutligang

2020-09-14 14:19

@海哥 不好意思,我再追问一下,我看就是在拦截器里才把controller里有 @SentinelResource注解的方法包在限流逻辑里。如果不用拦截器,确定是只要加 @SentinelResource这个注解,就可以走限流了吗?

海哥

2020-09-16 19:40

@zzutligang Jboot 是有一个拦截器 SentinelInterceptor,但是这个拦截器会被系统自动添加的,不需要人工主动编码添加。通过 @Clear 也无法清除这个拦截器。

JFinal

2020-09-20 17:03

@海哥 jfinal 内的拦截器都做到了只拼接一次,老版本中去掉 inject 类型的拦截器就是为了实现这个功能

jboot 这个版本理论上来说无法再次提升拦截器的性能,难道是去除了 jboot 以前的拦截器动态组装功能?

海哥

2020-09-21 18:11

@JFinal 波总,不太明白您说的 "jboot 这个版本理论上来说无法再次提升拦截器的性能,难道是去除了 jboot 以前的拦截器动态组装功能?" 指的是 jboot 的哪个模块?

JFinal

2020-09-21 18:17

@海哥 前些天不方便上网,所以先是在手机上看到了这篇文章:
https://www.oschina.net/news/118702/jboot-3-5-0-released

然后看到了文章中的下面这段:
有了 InterceptorBuilder 之后,我们可以通过 InterceptBuilder 给某个方法来构建其特定的拦截器,而不是全局拦截器,这样,极大的提高了性能,同时减少了不必要的调用堆栈。

在这里回复的时候我以为是 version 3.5.0, 回复到了错误的地方

海哥

2020-09-22 18:57

@JFinal 之前 jboot 实现很多的 AOP 功能,是通过全局拦截器去拦截的,比如 @Cacheable 等注解,但是使用这个注解的,并不是所有的 Service 或者 Controller,然而这些没有使用注解的 Service 和 Controller 也被这个没有必要的拦截器拦截了,就算里面做了简单的判断就放行,这个也是没有必要的。因此,可以通过 InterceptBuilder 更加让没有 @Cacheable 的注解,直接不添加这个拦截器了。