自定义DataSourceTransactionManager
的bean,名称为transactionManager
,提示Bean定义重复
在FlexTransactionAutoConfiguration
上添加@ConditionalOnMissingBean(TransactionManager.class)
项目启动报错
v1.7.9
换个名字试试呢?
换名字肯定是可以的
这样讲我的场景吧,一个服务需要8个数据源,有oracle ,sqlserver,postgresql等等,每个库的表是不一样的,所以我一共有8个DataSource
对象的bean,8个sqlSessionFactory
,然后通过@MapperScan(basePackages = { "ds1.mapper","ds2.mapper" },sqlSessionFactoryRef = "ds1SqlSessionFactory",sqlSessionTemplateRef = "ds1SqlSessionTemplate")
绑定扫描
如果这个项目客制化的用户未提供数据源,使用的http接口的方式,那这个项目只有一个DataSource
对象的bean,1个sqlSessionFactory
默认的DataSource
叫datasource
,默认的SqlSessionFactory
叫sqlSessionFactory
Spring原生也是支持这种拓展的,@ConditionalOnSingleCandidate(DataSource.class)
保证只有在单数据源才生效
我改个名字没有问题,但是项目中任然存在一个sqlSessionFactory
的bean,这个Bean会被作为@Transactional
注解的默认事务管理器,其他协作者并不指定,他不可能每次使用加@Transactional(transactionManager = "xxxTransactionManager", rollbackFor = Exception.class)
这是mybatis flex设计的问题所在
看到你提交了这个 pr,这个思路是可以被合并的,但是通过提交的代码看到应该还有许多问题,在 很多框架 中,默认是有 transactionManager 的,而 spring 或其他框架自带的 transactionManager 在用户未知的情况下,可能覆盖掉 flex 的 transactionManager,这个并不是我们想看到的。
我们希望看到的是,在默认情况下,flex 的 transactionManager 应该覆盖掉其他框架的 transactionManager。除非手动覆盖,所以,建议提交的 pr 应该是 “手动配置覆盖” 的思路。
亦或者是,为 flex 提供一个较高权重的排序,保证能够覆盖常见的框架。
意思明白,pull request又改了一下,这样修改能满足绝大部分场景了,比Spring的早就可以
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论