Spring 如何使用@Configuration@Beans而不是XML连接DataSourceTransactionManager
在Spring中连接事务管理器的典型XML如下所示:Spring 如何使用@Configuration@Beans而不是XML连接DataSourceTransactionManager,spring,Spring,在Spring中连接事务管理器的典型XML如下所示: <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="myDataSource" /> </bean> <bean id="myDataSource" class="com.mchange.v
<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>
.... 财产在这里。。。。
我如何用代码完成同样的事情
@Configuration
public class MyConfig {
@Bean
public DataSource myDataSource() {
return new DataSource(); /// and set properties, etc.
}
@Bean
public DataSourceTransactionManager txManager() {
--> What goes here? <--
}
}
@配置
公共类MyConfig{
@豆子
公共数据源myDataSource(){
返回新数据源();///并设置属性等。
}
@豆子
公共数据源TransactionManager txManager(){
-->这里是什么?由于DataSourceTransactionManager
有一个接受DataSource
的构造函数,您可以执行以下操作(否则需要调用setDataSource()
):
另请参见:
您还可以使用多个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());
}
}
然后,当使用@Transactional时,您可以定义所需的transactionManager:
@Transactional("txManager1")
public Object getSomeData(){
...
}
@Transactional("txManager2")
public Object getSomeOtherData(){
...
}
这确保了这里使用的单例与注入@Repository类的单例相同?如果有多个数据源用@Profile注释,情况如何?
@Transactional("txManager1")
public Object getSomeData(){
...
}
@Transactional("txManager2")
public Object getSomeOtherData(){
...
}