Spring 数据源列表的事务管理

Spring transaction management over a datasource list

我有一个 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 注释与相应的数据源一起工作。 似乎可行