spring 类似数据源的多个事务管理器
spring multiple transactionmanagers for similar datasources
我有两个数据源,它们的结构相同但数据不同。
我的应用程序必须同时处理它们。
我有控制器、服务、dao 结构,看起来像这样。
控制器型号:
@Controller
public abstract class MyFancyControllerModell{
private MyService service;
public MyFancyControllerModell (MyService service){
this.service = service;
}
@RequestMapping(....)
public void editSomeData(String data){....}
}
控制器实现:
@Controller
@RequestMapping(...)
public class MyControllerImpl1 extends MyFancyControllerModell{
@Autowired
public MyControllerImpl1(@Qualifier("myServiceInstance1") MyService service){
super(service);
}
}
@Controller
@RequestMapping(...)
public class MyControllerImpl2 extends MyFancyControllerModell{
@Autowired
public MyControllerImpl2(@Qualifier("myServiceInstance2") MyService service){
super(service);
}
}
和服务:
public class MyService{
private MyDao myDao;
public MyService(MyDao myDao){
this.myDao = myDao;
}
@Transactional
public void editSomeData(String data){...}
}
我在配置 class 中创建 Bean,如下所示:
private DataSource lookupDataSource(final String jndiName) {
final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
dsLookup.setResourceRef(true);
return dsLookup.getDataSource(jndiName);
}
@Bean
public DataSource dataSource1(){
return lookUpDataSource("dataSource1");
}
@Bean
public DataSource dataSource2(){
return lookUpDataSource("dataSource2");
}
@Bean
public MyService myServiceInstance1(@Qualifier("dataSource1") DataSource dataSource){
return new(MyService(new MyDao(dataSource))));
}
@Bean
public MyService myServiceInstance1(@Qualifier("dataSource1") DataSource dataSource){
return new(MyService(new MyDao(dataSource)));
}
我的问题是,是否可以为两个数据源创建事务管理器而无需在服务层中声明使用哪个事务管理器?
我尝试像服务一样将它们创建为 bean,但没有成功。
在此处查看上一个与事务管理器相关的问题的答案...
我有两个数据源,它们的结构相同但数据不同。 我的应用程序必须同时处理它们。 我有控制器、服务、dao 结构,看起来像这样。
控制器型号:
@Controller
public abstract class MyFancyControllerModell{
private MyService service;
public MyFancyControllerModell (MyService service){
this.service = service;
}
@RequestMapping(....)
public void editSomeData(String data){....}
}
控制器实现:
@Controller
@RequestMapping(...)
public class MyControllerImpl1 extends MyFancyControllerModell{
@Autowired
public MyControllerImpl1(@Qualifier("myServiceInstance1") MyService service){
super(service);
}
}
@Controller
@RequestMapping(...)
public class MyControllerImpl2 extends MyFancyControllerModell{
@Autowired
public MyControllerImpl2(@Qualifier("myServiceInstance2") MyService service){
super(service);
}
}
和服务:
public class MyService{
private MyDao myDao;
public MyService(MyDao myDao){
this.myDao = myDao;
}
@Transactional
public void editSomeData(String data){...}
}
我在配置 class 中创建 Bean,如下所示:
private DataSource lookupDataSource(final String jndiName) {
final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
dsLookup.setResourceRef(true);
return dsLookup.getDataSource(jndiName);
}
@Bean
public DataSource dataSource1(){
return lookUpDataSource("dataSource1");
}
@Bean
public DataSource dataSource2(){
return lookUpDataSource("dataSource2");
}
@Bean
public MyService myServiceInstance1(@Qualifier("dataSource1") DataSource dataSource){
return new(MyService(new MyDao(dataSource))));
}
@Bean
public MyService myServiceInstance1(@Qualifier("dataSource1") DataSource dataSource){
return new(MyService(new MyDao(dataSource)));
}
我的问题是,是否可以为两个数据源创建事务管理器而无需在服务层中声明使用哪个事务管理器?
我尝试像服务一样将它们创建为 bean,但没有成功。
在此处查看上一个与事务管理器相关的问题的答案...