jfinal-db与spring项目整合的方式

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

评论区