1. 事务作用:在数据层保障一系列的数据库操作同时成功同时失败
2. Spring事务作用:在数据层或业务层保障一系列的数据库操作同时成功同时失败
¤ Spring提供一个接口和实现类
public interface PlatformTransactionManager
{
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;
}
public class DataSourceTransactionManager
{
}
¤ 使用Spring事务的三个步骤
♦ 在业务层接口方法上添加事务注解 注:此注解可在实现类方法、接口或类上,开在接口或类上,表示接口或类所有方法都添加事务
public interface AccountService
{
@Transcactioncal
public void transfer(String out, String in, Double money);
}
♦ 添加事务管理器Bean注解
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource)
{
DataSourceTransactionManager ptm = new DataSourceTransactionManager();
ptm.setDataSource(dataSource);
return ptm;
}
♦ 在Spring配置类里开启事务管理的注解
@EnableTransactionManagement
public class SpringConfig
{
}
¤ Spring事务角色
♦ 事务管理员:发起事务方,在Spring中通常指代业务开启事务的方法。
♦ 事务协调员:加入事务方,在Spring中通常指代数据层方法,也可是业务层方法。
¤ @Transcactioncal事务注解相关设置
♦ readOnly 设置为是否只读事务 例:@Transcactioncal(readOnly = true)代表只读
♦ timeout 设置事务超时时间 例:@Transcactioncal(timeout = -1)代表永不超时
♦ rollbackFor 设置事务回滚异常(class) 例:@Transcactioncal(rollbackFor = {xxn异常.class})
♦ rollbackForClassName 设置事务回滚异常(String) 例:@Transcactioncal(rollbackForClassName = {className})
♦ noRollbackFor 设置事务不回滚异常(class) 例:@Transcactioncal(noRollbackFor = {xxn异常.class})
♦ noRollbackForClassName 设置事务不回滚异常(String) 例:@Transcactioncal(noRollbackForClassName = {className})
♦ progagation 设置事务传播行为 例:@Transcactioncal(progagation = Progagation.REQUIRES_NEW)
• REQUIRES 默认 管理员开启事务T/无事务 事务协调员加入T/新建事务T2
• REQUIRES_NEW 管理员开启事务T/无事务 事务协调员新建事务T2/新建事务T2
• SUPPORTS 管理员开启事务T/无事务 事务协调员加入T/无事务
• NOT_SUPPORTS 管理员开启事务T/无事务 事务协调员无事务/无事务
• MANDATORY 管理员开启事务T/无事务 事务协调员加入T/ERROR
• NERVER 管理员开启事务T/无事务 事务协调员ERROR/无事务
• NESTED 设置savePoint,一旦事务回滚,将回滚到savePoint处,交由客户响应提交或回滚
♦
浙公网安备 33010602011771号