Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何使用@Configuration@Beans而不是XML连接DataSourceTransactionManager_Spring - Fatal编程技术网

Spring 如何使用@Configuration@Beans而不是XML连接DataSourceTransactionManager

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

在Spring中连接事务管理器的典型XML如下所示:

<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(){
    ...
}