但问题是我不知道如何注释这个服务方法@Transactional
。 Transactional annotation只接受一个事务管理器,但我有3个。
我的方法有误吗?我该如何解决这个问题?
答案 0 :(得分:4)
如果您需要协调多个事务资源,那么我认为您唯一的选择是使用JTA进行分布式事务管理。 This article解释了如何配置Spring以使用JTA事务管理器。
在做了一些研究之后,如果你的三个数据源真的只是指向同一服务器托管的不同模式(与mysql中的数据库相同),那么你似乎有了更好的选择。如果是这种情况,并且您有一个用于所有三个连接的用户,那么您基本上可以将它们合并为一个连接,并在您的实体上使用@Table
注释来指定它们所属的架构,例如:@Table(schema = "schemaX")
。
这可以做到,因为连接URL中给出的数据库名称只指定了默认数据库(请参阅doc),但您仍然可以执行使用其他数据库名称限定表名的SQL语句,这正是<{1}}注释导致Hibernate。
现在只有一个连接可以解决您在不同模式的表中进行原子更新的原始问题。