多个SessionFactories,多个DataSource和Hibernate TransactionManager只能使用一个Sessionfactory

new*_*bie 5 java spring hibernate transactions

我在所有DAO中都有@Transactional注释,但我只能定义一个只占用一个SessionFactory的TransactionManager.我每个客户有一个SessionFactory,每个客户一个DataSource,显然我需要为每个客户更改TransactionManager.但是,当我只能为一个TransactionManager定义一个Spring bean名称时,如何才能为客户获得正确的事务管理器?

oct*_*tav 8

Spring 3支持多个事务管理器,同时保持声明式@Transactional分隔

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#tx-multiple-tx-mgrs-with-attransactional

这不是你想要的吗?


ska*_*man 2

这是 Spring 的声明式事务管理不再方便的示例,您需要切换到编程管理以获得所需的灵活性。例如,这将允许您将事务管理器映射注入 DAO 层,并相应地选择正确的事务管理器,从而TransactionTemplate使事情变得更容易。

或者,如果您在支持 JTA 的容器内运行,那么您可以使用 Spring 的JtaTransactionManager. 这将事务管理委托给应用程序服务器,同时保留 Spring API 语义。这也意味着任意数量的 DataSource 和 SessionFactory 可以参与一个事务管理器的管理。但是,这意味着您的数据源需要由应用程序服务器完全管理,这可能不适合您。