public interface AccountService {
@Transactional
public void transfer(String out,String in,Double money);
}
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(dataSource);
return transactionManager;
}
1.给想要添加事务的接口类加@Transactional注释
2.在jdbcconfig创建事务管理bean
3.给SpringConfig添加@EnableTransactionManagement注释,告诉编译器有事务
Spring事务角色
事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法
事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法
@Transactional(rollbackFor = IOException.class)
public void transfer(String out,String in,Double money) throws IOException;
rollbackFor = IOException.class代表遇到IOException异常也进行事务回滚
转账业务追加日志
实现效果:无论转账是否成功,均进行转账操作的日志留痕
如果日志的事务和转账的事务同属一个事务,那么就会一起回滚,所以要避免这种情况
事务传播行为
事务传播行为:事务协调员对事务管理员所携带事务的处理态度
public interface LogService {
@Transactional(propagation = Propagation.REQUIRES_NEW)
void log(String out,String in,Double money);
}