9:Spring事务
- 阳间小技巧:想想数据库事务
9.1:准备工作
@EnableTransactionManagement
- 在jdbc配置类中配置事务管理器
@Bean public PlatformTransactionManager transactionManager(DataSource dataSource){ DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(); transactionManager.setDataSource(dataSource); return transactionManager; }
- 给相关需要事务管理的接口方法配置事务
//配置当前接口方法具有事务 @Transactional public void transfer(String out,String in ,Double money) ;
- 开始测试
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfig.class) public class AccountServiceTest { @Autowired private AccountService accountService; @Test public void testTransfer() throws IOException { accountService.transfer("Tom","Jerry",100D); } }
9.2:事务传播行为
- 当你在一个测试中测试两个两个甚至是多个事务,但是其中一个事务是必须实现的(无论程序是否发生错误),这个时候怎么办呢,只需要给这个事务的接口配置事务属性
propagation = Propagation.REQUIRES_NEW
就行了
//propagation设置事务属性:传播行为设置为当前操作需要新事务 @Transactional(propagation = Propagation.REQUIRES_NEW) void log(String out, String in, Double money);
- 怎么设置事务遇到异常回滚呢?别慌,看我操作。
//下面设置的是,当事务遇到IO异常,就事务回滚。 //rollback:设置当前事务参与回滚的异常,默认非运行时异常不参与回滚 @Transactional(rollbackFor = IOException.class)