Java 数据源列表上的Spring事务管理

Java 数据源列表上的Spring事务管理,java,spring,spring-transactions,transactional,Java,Spring,Spring Transactions,Transactional,我有一个Spring mvc rest Web服务,它有一个DataSourceManagerbean,其中包含一个数据源映射。每个客户都有自己的数据库,因此也有自己的数据源。Web服务以编程方式从DataSourceManager加载客户数据源,如果它不存在,则创建一个新的 通过此实现,是否可以使用注释驱动的事务管理?我阅读的所有示例都在配置文件中声明了一个或多个数据源。最后我解决了这个bean的问题: @Bean @Scope(value=WebApplicationContext.SCOP

我有一个Spring mvc rest Web服务,它有一个
DataSourceManager
bean,其中包含一个数据源映射。每个客户都有自己的数据库,因此也有自己的数据源。Web服务以编程方式从
DataSourceManager
加载客户数据源,如果它不存在,则创建一个新的


通过此实现,是否可以使用注释驱动的事务管理?我阅读的所有示例都在配置文件中声明了一个或多个数据源。

最后我解决了这个bean的问题:

@Bean
@Scope(value=WebApplicationContext.SCOPE_REQUEST, proxyMode=ScopedProxyMode.TARGET_CLASS)
public PlatformTransactionManager txManager(SessionInfo sessionInfo, DataSourceManager dsManager)   
{               
    return dsManager.getTransactionManager(sessionInfo.getCustomerId()); 
}
其中,
SessionInfo
是保存客户的会话bean,
DataSourceManager
是保存所有数据源的全局bean。每个web请求都加载正确的事务管理器,
@Transactional
注释与相应的数据源一起工作。
这似乎有效

您基本上拥有的是多租户,当设置正确时,您可以使用正常的事务划分,就好像您有一个单一的数据源一样。有一件事被记录在案。我们将其用于web应用程序,但将其应用于web服务(基本上也是web应用程序)应该没有那么困难。