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 发布,优化控制器、缓存和事务》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Ajax Design Patterns

Ajax Design Patterns

Michael Mahemoff / O'Reilly Media / 2006-06-29 / USD 44.99

Ajax, or Asynchronous JavaScript and XML, exploded onto the scene in the spring of 2005 and remains the hottest story among web developers. With its rich combination of technologies, Ajax provides a s......一起来看看 《Ajax Design Patterns》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具