1 配置事务管理器
<bean id="transactionManager" name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean>
@Autowired private DataSourceTransactionManager transactionManager;
@Test
public void test(){
DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 定义事务传播 TransactionStatus status = transactionManager.getTransaction(def);
try {
许多sql修改语句
// 提交事务 transactionManager.commit(status); } catch (Exception e) { // 回滚事务
transactionManager.rollback(status);
}
}
注意:
如果还有一个方法test2()存在事务,且使用事务传播:PROPAGATION_REQUIRES_NEW,
当test1中调用test2,且两个事务的sql处理涉及到修改同一个表,将会导致死锁
故而,一般是使用PROPAGATION_REQUIRED