如何使得JdbcTemplate和Mybatis操作在同一事务中?
场景:项目老代码使用JdbcTemplate操作,新代码主要是Mybatis。
当用mybatis进行插入操作后,使用JdbcTemplate进行数据查询,查询为空,临时测试代码用mybatis查询可以查到。
目前想在不改动老代码的情况下(主要将老代码改成mybatis工作量太大),使得操作在同一事物下。
您的每一个用心回答,都会让这个世界变得更美好一些!
随着学习的加深,对于这个问题我有了个思路。
思路1:
jdbcTemplate操作的代码单独封装一个方法,加上事务
mybatis操作单独封装一个方法,加上事务
然后设置事务的传播行为,传播行为里面可以要求两个方法运行在同一个事务中
思路2:
jdbcTemplate 和 mybatis 都使用了同一个事务管理器DataSourceTransactionManager,理论上应该是可以做到同事务的,或许你可以从DataSourceTransactionManager上下手
后来你怎么解决的这个问题?
简单的办法就是,用mybatis 替换掉jdbcTemplate。你jdbcTemplate无法也就是直接写sql拼参数,你大可把sql写到mybatis的 mapperXml中,这样就可以代替掉
通过修改多数据源配置中默认的数据源为动态代理数据源TransactionAwareDataSourceProxy,并且将transactionManager使用的数据源也修改为代理数据源后问题修复。
ps:目前看没什么问题,但没测试多数据源的情况下会不会有影响
可以的,去搜一下相关的整合文章跟练一下,再改你的项目吧。
随着学习的加深,对于这个问题我有了个思路。
思路1:
jdbcTemplate操作的代码单独封装一个方法,加上事务
mybatis操作单独封装一个方法,加上事务
然后设置事务的传播行为,传播行为里面可以要求两个方法运行在同一个事务中
思路2:
jdbcTemplate 和 mybatis 都使用了同一个事务管理器DataSourceTransactionManager,理论上应该是可以做到同事务的,或许你可以从DataSourceTransactionManager上下手
后来你怎么解决的这个问题?
简单的办法就是,用mybatis 替换掉jdbcTemplate。你jdbcTemplate无法也就是直接写sql拼参数,你大可把sql写到mybatis的 mapperXml中,这样就可以代替掉
通过修改多数据源配置中默认的数据源为动态代理数据源TransactionAwareDataSourceProxy,并且将transactionManager使用的数据源也修改为代理数据源后问题修复。
ps:目前看没什么问题,但没测试多数据源的情况下会不会有影响
可以的,去搜一下相关的整合文章跟练一下,再改你的项目吧。