2013年5月25日土曜日

spring,mybatis多DB连接,事务管理

 配置文件:
<bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            .。。。
</bean>
      
<bean id="transactionManager1"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource1" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager1" />
  
<bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource1" />
</bean>

<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            .。。。
</bean>
      
<bean id="transactionManager2"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource2" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager2" />
  
<bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource2" />
</bean>

java代码:
case1
①class1:
@Transactional(value = "transactionManager1", rollbackFor=Exception.class)
public int insert1() {
insertDB1();
class2.insert2();
}

②class2:
@Transactional(value = "transactionManager2", rollbackFor=Exception.class)
public int insert2() {
insertDB2();
throw exception();
}

结果①②都能回滚

case2
①class1:
@Transactional(value = "transactionManager1", rollbackFor=Exception.class)
public int insert1() {
insertDB1();
class2.insert2();
throw exception();
}

②class2:
@Transactional(value = "transactionManager2", rollbackFor=Exception.class)
public int insert2() {
insertDB2();
}

结果①回滚②提交

0 件のコメント: