### 之前发布过一篇文章说的是怎么整合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 的兼容),可能会有点小瑕疵,但已稳定运行了很久,才编写了这篇配置文。