事务的传播机制
propagation=
Propagation.REQUIRED:
必须要有事务,如果原来有事务则假如原事务,原来没有事务则新建个事务执行Propagation.NOT_SUPPORTED:
不开启事务Propagation.REQUIRES_NEW:
不管是否原来有事务,都新开启一个事务,将原来的事务挂起,等本事务执行完毕之后,再继续原来的事务Propagation.MANDATORY:
必须要在一个事务中执行,如果原来没有事务,则直接异常Propagation.NEVER:
必须没有事务执行,如果原来有事务,则直接异常Propagation.SUPPORTS:
依调用该方法的地方为准,调用方有事务就按照他的事务执行,如果没有事务就无事务执行
事务会出现的问题
脏读:
一个事务读取到另一事务未提交的更新数据
隔离级别为读未提交会出现脏读,隔离级别高于读未提交可以解决该问题不可重复读:
同一事务中多次读取数据返回结果不同,原因是其他事务在本事务读取数据的事务中改动了对应的数据
隔离级别为读未提交和读已提交会出现不可重复读,隔离级别高于读已提交可解决该问题幻读:
一个事务读取到另一个事务已经提交的 insert 数据
隔离级别为读已提交和可重复读会出现幻读,隔离级别高于可重复读可解决该问题
事务隔离级别
isolation =
Isolation.READ_UNCOMMITTED
读取未提交数据(会出现脏读, 不可重复读) 基本不使用Isolation.READ_COMMITTED
读取已提交数据(会出现不可重复读和幻读)Isolation.REPEATABLE_READ
可重复读(会出现幻读)Isolation.SERIALIZABLE
串行化
网友评论