### 之前发布过一篇文章说的是怎么整合spring的事务注解,让jfinal更好的运行在spring项目里或与mybaties共存的目的,现在将对应的方案做成了jar包,直接在项目里引用即可开箱即用
### 工具jar包地址:
https://github.com/MrYang-Jia/jfinal-spring-tx
maven 依赖
<dependencies> <!-- jfinal-spring事务工具类 --> <dependency> <groupId>com.edbplus</groupId> <artifactId>jfinal-spring-tx</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>com.jfinal</groupId> <artifactId>activerecord</artifactId> <!-- 必须大于等于4.9.11 版本,否则无效 --> <version>[4.9.11,)</version> </dependency> <!-- ================= 可选jar包组合1 和 组合2 选1个即可 ========================= --> <!-- ================= 可选jar包组合1 ========================= --> <!-- springJdbc 常用工具类 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> <version>${spring-boot.version}</version> </dependency> <!-- ================= 可选jar包组合1 结束 ========================= --> <!-- ================= 可选jar包组合2 ========================= --> <!-- 支持在 spring 之中整合使用 jfinal的事务 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring-tx.version}</version> <scope>provided</scope> </dependency> <!-- 支持在 spring 之中整合使用 jfinal,通过jdbc现成的事务管理工具操作事务 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring-tx.version}</version> <scope>provided</scope> </dependency> <!-- ================= 可选jar包组合2结束 ========================= --> </dependencies>
config配置启动类
/** * @ClassName SpringConfig * @Description: db配置文件 -- 初始化配置方式 -1 * @Author 杨志佳 * @Date 2020/10/23 * @Version V1.0 **/ @Slf4j @EnableAutoConfiguration @Configuration public class SpringConfiguration { // // 等待db1Source启动后注入 // // 如果注入的时候报说找不到数据源,则可能是启动顺序的问题导致,可以尝试这么引入 @Qualifier("dataSource") @Autowired DataSource dataSource; /** * 生成数据源1 -- 主数据源 (ps:可以不用特意注册 dbpro,这里只是大概的一个讲解案例) * 也可以将该启动配置方法写成一个工具类,这样子,就可以在注入datasource启动时候直接启动 jfinalDb,这样子可能会更优雅 * @return */ @Bean(name = "eDbPro") public DbPro getEDbPro(){ // 调用本类的bean方法,会自动经过bean的拦截实现,获取到实例化后的bean实体 // todo:步骤1 - 适配spring数据库连接池 -- 适配事务 SpringConfig activerecordConfig = new SpringConfig( // 默认名称 ,使用 Db.use() 时,可获取到 DbKit.MAIN_CONFIG_NAME // 这里可以替换成 spring体系的datasource ,dataSource // 事务级别 ,如果是spring时,可使用spring的事务级别替代,这个是属于数据库事务级别定义的,都一样 , DbKit.DEFAULT_TRANSACTION_LEVEL ); // 初始化数据源 ActiveRecordPlugin arp = new ActiveRecordPlugin(activerecordConfig); // todo:步骤2 - 改造dbPro对象,实现工厂模式,适配 tx() 与 spring单线程事务一致 SpringDbProFactory springDbProFactory = new SpringDbProFactory(); // 设置 dbPro 工厂 arp.setDbProFactory(springDbProFactory); // 其余配置请根据自己的项目自己设置 arp.getEngine().setSourceFactory(new ClassPathSourceFactory()); // 打印sql -- 交予底层统一打印,建议设置成false,自己定义监听器,或者交予 druid 的sql打印信息即可 arp.setShowSql(true); //基础数据模板 // arp.addSqlTemplate("/sql/all.sql"); //添加共享模板 // arp.getEngine().addSharedFunction("/sql/sharedfunction/common_function.sql"); arp.getEngine().addSharedMethod(new com.jfinal.kit.StrKit()); // // 如果不是linux环境 // if(!SystemUtil.getOsInfo().isLinux()){ // // 开发者模式 // arp.setDevMode(true); // }else{ // // 非开发者模式 -- 生产用该方式 // arp.setDevMode(false); // } // 启动Record容器 arp.start(); return Db.use(); } }
编辑得有点乱,由于懒,所以有需要的可以参考下实现,只用了三个类对象完成了对spring和jfinal事务兼容的办法(基于spring注解事务 @Transactional 和jfinal申明式事务 tx 、newTx 的兼容),可能会有点小瑕疵,但已稳定运行了很久,才编写了这篇配置文。