Jboot v3.14.0 发布,优化控制器、缓存和事务

栏目: 软件资讯 · 发布时间: 2年前

内容简介:Jboot 一个更简单的分布式、微服务框架。 Jboot是一个基于 JFinal、JFinal-Undertow、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等开发的微服务框架,帮助开发者降低微服务、分布式开发门槛。爽爽开发,快乐...

Jboot 一个更简单的分布式、微服务框架。

Jboot是一个基于 JFinal、JFinal-Undertow、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等开发的微服务框架,帮助开发者降低微服务、分布式开发门槛。爽爽开发,快乐生活。

支持 JDK8~JDK17。

Jboot v3.14.0 主要是新增了 Controller 返回值自动匹配渲染器、Controller 缓存(@Cacheable)、@Transactional() 事务注解等的支持,并优化多个细节。

Controller 缓存实例:

@Cacheable(name = "aaa", liveSeconds = 10)
public void json() {
    
    System.out.println("json() invoked!!!!!!!!!");
    
    Map<String, Object> data = new HashMap<>();
    data.put("age", 1);
    data.put("name", "张三");
    data.put("sex", 1);
    
    renderJson(data);
}

以上的代码中,在 10 秒钟内多次访问的时候,只有第一次访问到了 json() 方法,其余的都直接使用第一次的结果输出给浏览器。其中,缓存的名称为 "aaa",key 为 class.method() 格式。我们可以通过 @Cacheable(name = "aaa", key="xxx") 来指定缓存的key值。

其中 key 里的内容还可以使用 #(方法参数名称)  @para('http参数名称') 的方式来定义 key。

例如:

@Cacheable(name = "aaa", key="#para('mykey')", liveSeconds = 10)
public void json() {
    
    System.out.println("json() invoked!!!!!!!!!");
    
    Map<String, Object> data = new HashMap<>();
    data.put("age", 1);
    data.put("name", "张三");
    data.put("sex", 1);
    
    renderJson(data);
}

当访问 http://127.0.0.1:8080/json?mykey=thekey 的时候,该缓存的 key 的内容为:"thekey"。然而,在某些极端场景下,我们可能是不需要缓存的,配置如下:

@Cacheable(name = "aaa", liveSeconds = 10, unless = "para('type')==1")
public void json2() {
     System.out.println("json2() invoked!!!!!!!!!");
     Map<String, Object> data = new HashMap<>();
     data.put("age", 1);
     data.put("name", "张三");
     data.put("sex", 1);
     renderJson(data);
}

当访问 http://127.0.0.1:8080/json2?type=1 的时候,永远不会命中缓存。

Controller 返回值制动匹配渲染器实例:

@RequestMapping("/")
public MyController extends Controller{

    //自动使用 html 来渲染
    public String test1(){
        return "test1.html";
     }

     //自动使用文本来渲染
    public String test2(){
        return "test2...";
    }

    //渲染 404 错误
    public String test3(){
        return "error: 404";
    }

    //渲染 500 错误
    public String test4(){
        return "error: 500";
    }

    //自动 redirect 跳转
    public String test5(){
        return "redirect: /to/your/path";
    }

    //自动 forward action 重定向
    public String test6(){
        return "forward: /to/your/path";
    }

    //自动进行文件下载
    public File test7(){
        return new File('/file/path');
    }

    //渲染 json 内容
    public Object test8(){
        Map<String,Object> map = new HashMap<>();
        map.put("key","value....");
        return map;
    }

    //使用自动的 render 渲染
    public Object test9(){
        Render render = new TextRender("some text...");
        return render;
    }
        
}

@Transactional 注解实例

实例1:出现异常时回滚

@Transactional
public void test1() {
   //your code
   throw new RuntimeException("...");     
}

实例2:返回值为 false 时回滚

@Transactional(rollbackForFalse=true)
public boolean test2() {
   //your code
   return false;
}

实例3:返回值为 Ret.fail() 时回滚

@Transactional(rollbackForRetFail=true)
public Ret test3() {
   //your code
   return Ret.fail("message...");
}

实例4:返回值为 null 时回滚

@Transactional(rollbackForNull=true)
public Ret test3() {
   //your code
   return null;
}

@Transactional 的更多配置:

public @interface Transactional {

    /**
     * 使用哪个数据源
     *
     * @return
     */
    String config() default "";

    /**
     * 事务隔离级别
     *
     * @return
     */
    int transactionLevel() default -1;

    /**
     * return false 的时候,是否进行回滚
     *
     * @return
     */
    boolean rollbackForFalse() default false;

    /**
     * return ret.fail 的时候,是否进行回滚
     *
     * @return
     */
    boolean rollbackForRetFail() default false;


    /**
     * 返回 null 的时候,是否进行回滚
     *
     * @return
     */
    boolean rollbackForNull() default false;


    /**
     * 配置允许哪些异常不回滚
     *
     * @return
     */
    Class<? extends Throwable>[] noRollbackFor() default {};

    /**
     * 是否在新的线程里执行,在 Controller 的 Action 方法下配置无效
     * 在 Controller 里,不能以新的线程在运行
     *
     * @return
     */
    boolean inNewThread() default false;

    /**
     * 使用哪个线程池来运行线程,需要在启动的时候,通过 TransactionalManager 来配置线程池及其名称
     *
     * @return
     */
    String threadPoolName() default "";

    /**
     * 是否以阻塞的方式运行线程,这个配置只有在返回值 void 情况下配置生效
     * 有返回值的,此配置无效,默认都是阻塞运行线程的方式运行
     *
     * @return
     */
    boolean threadWithBlocked() default false;

}

更多细节,请查看 changelist.

Jboot v3.14.0  更新内容如下:

  • 新增:@Cacheable() 等系列缓存注解对 controller 的支持
  • 新增:Controller 返回值,自动匹配相应的 render 的支持
  • 新增:分布式任务注解 @EnableDistributedRunnable,自定义的 redisKey 和 key 持有时间配置功能。
  • 新增:AttachmentManager 新增 getFile(path,localFirst) 方法
  • 新增:CookieUtil 添加 "defaultPath" 和 "defaultDomain" 的配置
  • 新增:HttpUtil 添加 http 代理的配置支持
  • 新增:Columns.addToFirst() 方法
  • 新增:JbootDirectiveBase.getParaToString()
  • 新增:MQ 新增 stopListening() 方法,可用于定制化关闭 MQ
  • 修复:Junit 代码覆盖率测试可能出现多次启动的问题
  • 修复:JbootCron4jPlugin 停止后未移除已经停止任务的问题
  • 优化:优化 fastjson 序列化的功能,使用 config 而非 features
  • 优化:重命名注解 @TxEnable() 修改为 @Transactional(),并为 @Transactional() 添加更多的配置功能
  • 优化:为 RabbitMQ 添加更多的自定义配置
  • 优化:自动检测是否依赖 jfinal-wexin 并自动配置 JbootAccessTokenCache
  • 优化:删除 JacksonSerializer 等无用的代码文件
  • 优化:优化配置文件的的自动探测功能,防止在某些新手未编译直接运行找不到配置文件的问题
  • 优化:优化 JbootHttpImpl 和 JbootHttpResponse 代码,添加必要的日志输出
  • 优化:更新 Copyright
  • 优化:升级相关依赖到最新版本
  • 文档:完善关于 Controller 和 数据库的相关文档

 

Jboot 开发文档:

http://www.jboot.com.cn

同时,Jboot 官方也推出了收费的、企业级快速开发框架 JbootAdmin (如下图所示),真诚的为各位开发者提供一站式、保姆式服务。请咨询海哥。

更多关于 JbootAdmin 请参考:http://www.jboot.com.cn/jbootadmin/feature.html 

Jboot v3.14.0 发布,优化控制器、缓存和事务

Maven 依赖:

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

Hello World:

@RequestMapping("/")
public class HelloWorld extends JbootController {

    public void index(){
        renderText("hello world");
    }

    public static void main(String[] args){
        JbootApplication.run(args);
    }
}

 


以上所述就是小编给大家介绍的《Jboot v3.14.0 发布,优化控制器、缓存和事务》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

A Guide to Monte Carlo Simulations in Statistical Physics

A Guide to Monte Carlo Simulations in Statistical Physics

Landau, David P./ Binder, Kurt / Cambridge Univ Pr / 2005-9 / 786.00元

This new and updated edition deals with all aspects of Monte Carlo simulation of complex physical systems encountered in condensed-matter physics, statistical mechanics, and related fields. After brie......一起来看看 《A Guide to Monte Carlo Simulations in Statistical Physics》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具