How to connect DataSourceTransactionManager with @Configuration @Beans instead of XML

Typical XML for connecting a transaction manager in Spring is as follows:

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="myDataSource" /> </bean> <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> .... properties go here .... </bean> 

How to do the same with code?

 @Configuration public class MyConfig { @Bean public DataSource myDataSource() { return new DataSource(); /// and set properties, etc. } @Bean public DataSourceTransactionManager txManager() { --> What goes here? <-- } } 

In particular, how can I connect txManager to myDataSource syntax via code?

+6
source share
2 answers

Since the DataSourceTransactionManager has a constructor that accepts a DataSource , you can do the following (otherwise you would need to call setDataSource() ):

 @Bean public DataSourceTransactionManager txManager() { return new DataSourceTransactionManager(myDataSource()); } 

See also:

+6
source

You can also use multiple transactionManager

  @Configuration public class MyConfig { @Bean public DataSource myDataSource1() { return new DataSource(); /// and set properties, etc. } @Bean @Qualifier("txManager1") public DataSourceTransactionManager txManager1() { return new DataSourceTransactionManager(myDataSource1()); } @Bean public DataSource myDataSource2() { return new DataSource(); /// and set properties, etc. } @Bean @Qualifier("txManager2") public DataSourceTransactionManager txManager2() { return new DataSourceTransactionManager(myDataSource2()); } } 

Then, when you use @Transactional, you can determine the required transactionManager:

 @Transactional("txManager1") public Object getSomeData(){ ... } @Transactional("txManager2") public Object getSomeOtherData(){ ... } 
+2
source

Source: https://habr.com/ru/post/891640/


All Articles