【发布时间】:2021-05-28 23:39:16
【问题描述】:
我们有这段代码,其中相同的service 方法将调用不同的daos,每个使用不同的datasource(和不同的JdbcTemplates)。我们想使用@Transactional 注解,但据我所知,这个注解总是链接到特定的TransactionManager(因此,链接到特定的DataSource)。
所以,我的问题是,有没有办法在调用@Transactional 方法时动态选择使用哪个DataSource(或TransactionManager),以便我可以重用该方法来攻击不同的数据库?
【问题讨论】:
-
如果您希望它与不同的数据源一起工作,也许它不应该使用声明性事务管理?您想重用该方法,但这并不意味着使用
@Transactional的硬性要求,是吗? -
是的,你是对的,没有。我们可以使用
PlatformTransactionManager并使用程序化事务,但我想知道是否存在“声明性”的可能性。 -
好吧,SpEL 本来可以成为你的救星,但注释不是 support it,或者它......那是从 2013 年开始的?不...不支持。
-
但我没有看到不使用程序化事务的理由。这是你需要额外控制的地方(与
@Transactional的易用性相比),只要确保你写得漂亮、干净、可维护和有据可查。 -
@didgewind 这个另一个question 可以为您指明正确的方向
标签: java spring transactions