Spring 事务简介
- 事务作用:在数据层保障一系列的数据库操作同成功同失败
- Spring 事务作用:在数据层或业务层保证一系列的数据库操作同成功同失败
public interface PlatformTransactionManager {
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;
}
public class DataSourceTransactionManager {
...
}
步骤:
- 在业务层接口上添加 Spring 事务管理
public interface AccountService {
@Trabsactional
public void transfer(String out, String in, Double money);
}
注意: Spring注解式事务通常添加在业务层接口中而不会添加到业务层实现类中,降低耦合;
注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务。
- 设置事务管理器
//配置事务管理器,mybatis使用的是jdbc事务
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(dataSource);
return transactionManager;
}
PlatformTransactionManager : Spring 提供的标准接口
DataSourceTransactionManager : Spring 提供的实现类,用的是jdbc事务
如果要换,接口不能动,换实现类。
记得要注入 dataSource
注意: 事务管理器要根据实现技术进行选择,mybatis框架使用的是jdbc事务
- 开启注解式事务驱动 : @EnableTransactionManagement
@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.priperties")
@Import({JdbcConfig.class,MybatisConfig.class})
@EnableTransactionManagement
public class SpringConfig{
}
Spring 事务角色
- 事务管理员: 发起事务方,在Spring中通常指代业务层开启事务的方法
- 事务协调员: 加入事务方,在Spring中通常值代数据层方法,也可以是业务层方法
Spring 事务属性
事务传播行为
- 事务传播行为: 事务协调员对事务管理员所携带事务的处理态度
@Transactional(propagation = Propagation.REQUIRES_NEW)
public interface LogService {
//propagation设置事务属性:传播行为设置为当前操作需要新事务
@Transactional(propagation = Propagation.REQUIRES_NEW)
void log(String out, String in, Double money);
}