事务: 原子性(atomicity) : 要么同时成功,要么同时失败 一致性(consistency) : 最后数据完整性不能被破坏 隔离性(isolation) : 事务之间互不影响 持久性(durability) : 事务完成后,对数据的修改是永久的,不可恢复
分类:
spring中事务类: PlatformTransactionManager 定义了事务的操作方法 TransactionDefinition 定义了事务的属性。。隔离性,传播性,是否只读,超时时间,回滚规则 回滚规则:RuntimeException 和 error
TransactionStatus :事物本身
声明式事务使用:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
@Service
public class UserService {
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
UserService2 userService2;
@Transactional
public void transfer(){
jdbcTemplate.update("update account set money=? where username=?",100,"cc");
userService2.update();
}
}
@Service
public class UserService2 {
@Autowired
JdbcTemplate jdbcTemplate;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void update(){
jdbcTemplate.update("update account set money=? where username=?",100,"wy");
int i =1/0;
}
}
spring事务传播类型7种 传播性:多个事务方法互相调用的时候,描述事务要怎么处理,事务如何在这些方法间传播
- required:
默认:如果当前存在事务的话,就加入到当前事务里面去,如果当前没有事务的话,就创建一个新的事务。。因为这两个方法都在同一个事务中执行,所以只要有任意一个抛出异常,都会导致整体回滚 - required_new
可能会同时出现两个事务,,如果当前存在事务,则将当前事务挂起,里面再开启一个事务,独自运行。。带来的问题:里面的方法会自己开事务,,如果外面的事务抛出异常,并不会导致里面的回滚,因为里面是一个独立的事务。。如果里面的方法抛出异常,,里面的事务会回滚,但是,如果这个异常被处理掉了,外部事物不会回滚,如果这个异常没有处理,外部事务回滚 - nested : 嵌套的
嵌套事务,如果当前存在事务,就会创建一个事务作为嵌套事务来运行,如果没有事务,相当于require 嵌套事务:外部事物的子事务,主事务回滚,子事务跟着一起回滚。。子事务回滚,不会影响主事务,也不会影响其他的子事务 - mandatory 强制性的
如果存在当前事务就加入到当前事务,如果当前没有事务,抛出异常 自己不创建事务,必须加到别的事务中去 - supports
如果存在当前事务就加入到当前事务,如果没有,则以非事务的方法继续运行 - not_support
以非事务方式运行,如果当前存在事务就将当前事务挂起 - never
以非事务方式运行,如果有事务,抛异常
spring事务失效
- 方法必须是public
- MyISAM引擎不支持事务
- 使用
this 调用@Transactional 方法。。自身调用,没有经过Aop
问题: 不走索引会升级成表锁
create unique index index_name on account(username)
为什么不用@EnableTransactionManagement 就能开启事务 引用:https://blog.csdn.net/z69183787/article/details/114633108
引用:https://mp.weixin.qq.com/s/6tRPXwXnWUW4mVfCdBlkog
|