网站免费模板制作,万网 成品网站,废品网站怎么做,南宁网站建公司电话号码声明式事务概念 声明式事务是指使用注解或 XML 配置的方式来控制事务的提交和回滚。 开发者只需要添加配置即可#xff0c; 具体事务的实现由第三方框架实现#xff0c;避免我们直接进行事务操作#xff01; 使用声明式事务可以将事务的控制和业务逻辑分离开来#xff0c;提…声明式事务概念 声明式事务是指使用注解或 XML 配置的方式来控制事务的提交和回滚。 开发者只需要添加配置即可 具体事务的实现由第三方框架实现避免我们直接进行事务操作 使用声明式事务可以将事务的控制和业务逻辑分离开来提高代码的可读性和可维护性。 区别 - 编程式事务需要手动编写代码来管理事务 - 而声明式事务可以通过配置文件或注解来控制事务。
spring声明式事务实现原理 一、事务的定义
事务是数据库操作的最小工作单元作为单个逻辑工作单元执行的一系列操作。这些操作必须作为一个整体来执行即要么全部成功要么全部失败。事务的这一特性保证了数据的一致性和可靠性特别是在多用户共享资源的环境下。
在没有spring框架的情况下需要我们进行编程式事务即自己手动控制事务的回滚和提交
但是操作繁杂所以我们使用了spring框架的声明式事务自动控制事务的各种流程那么如何添加声明式事务呢
二.添加声明式事务
对于需要添加事务的方法添加一个这样的注解就可以添加声明式事务了 不过要注意我们在配置类中需要添加一个如下图红箭头所示的注解去开启事务注解的支持 并且我们需要在ioc容器中给对应的数据库连接池添加这样的管理器 事务属性
只读模式 代码如下当一个数据库操作只有查询的时候可以设置事务为只读模式这样会加快查询的效率
package org.atguigu.Service;import org.atguigu.dao.StudentDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;Service
Transactional
public class StudentService {Autowiredprivate StudentDao studentDao;Transactional(readOnly true)public void changeInfo(){studentDao.updateAgeById(100,1);int i1/0;System.out.println(-----------);studentDao.updateNameById(test1,1);}
}超时时间 我们假设有如下代码我们设置超时时限为3然后我们使得这个线程休眠4000于是当我们执行后就会发生以下错误
Transactional(readOnly true,timeout 3)public void changeInfo(){studentDao.updateAgeById(100,1);int i1/0;try {Thread.sleep(4000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(-----------);studentDao.updateNameById(test1,1);} 那么我们思考一个问题假设我们在类上施加一个超时时限的注解其中的方法会如何呢
观察如下代码我们在类上设置了一个timeout 3类上有一个注解用于设置只读模式
那么执行结果会是什么样呢
package org.atguigu.Service;import org.atguigu.dao.StudentDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;Service
Transactional(timeout 3)
public class StudentService {Autowiredprivate StudentDao studentDao;Transactional(readOnly false)public void changeInfo(){studentDao.updateAgeById(100,1);
// int i1/0;try {Thread.sleep(4000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(-----------);studentDao.updateNameById(test1,1);}
}执行结果如下我们可以发现没有任何报错这是因为方法上的注解将类上的注解覆盖掉了 事务异常
正常情况下假设你不做任何设置其只会在运行时异常发生时才会发生事务回滚 那么假设我们想要规定一些默认情况下不会回滚的异常也要进行回滚那么我们该如何做呢 首先我们观察一下异常类的各种关系当默认情况下发生RentimeException(运行时异常)
就会回滚而IOException就不会发生回滚
如图我们设置了一个rollbackfor Exception.class 这个注解的属性这个属性规定了事务发生什么类型的错误应该回滚
而我们还设置了一个noRollbackFor RuntimeException.class 这个注解属性这个属性的意思是在回滚范围内什么异常类型不回滚 事务隔离
1. 事务隔离级别 数据库事务的隔离级别是指在多个事务并发执行时数据库系统为了保证数据一致性所遵循的规定。常见的隔离级别包括 1. 读未提交Read Uncommitted事务可以读取未被提交的数据容易产生脏读、不可重复读和幻读等问题。实现简单但不太安全一般不用。 2. 读已提交Read Committed事务只能读取已经提交的数据可以避免脏读问题但可能引发不可重复读和幻读。 3. 可重复读Repeatable Read在一个事务中相同的查询将返回相同的结果集不管其他事务对数据做了什么修改。可以避免脏读和不可重复读但仍有幻读的问题。 4. 串行化Serializable最高的隔离级别完全禁止了并发只允许一个事务执行完毕之后才能执行另一个事务。可以避免以上所有问题但效率较低不适用于高并发场景。 不同的隔离级别适用于不同的场景需要根据实际业务需求进行选择和调整。 脏读Dirty Read一个事务可以读取另一个事务尚未提交的数据。如果该数据后来被回滚那么第一个事务读取到的数据就是“脏”的。脏读通常发生在读未提交隔离级别下。 不可重复读Non-repeatable Read在一个事务中两次读取同一数据时数据内容不同。这是因为在两次读取之间另一个事务修改并提交了该数据。不可重复读通常发生在读已提交隔离级别下。 幻读Phantom Read一个事务在读取某范围的数据时另一个事务在该范围内插入了新数据导致前一个事务再次读取时发现多了“幻影”行。幻读通常发生在可重复读隔离级别下。 在代码中我们可以这样设置事务的隔离性 事务传播
事务传播的定义
指的是事务之间的调用叫做事务传播比如下列图片中的业务方法1调用业务方法2这叫做事务的传播我们一般将事务的传播属性设置到子事务上
事务的传播属性有
1.假如父事务
2.不加入父事务 注解方式规定事务传播
通过在Transactional注解里面添加一个propagation注解设置事务的传播行为 那么设置事务的传播行为有什么用呢举个例子在topService()事务里面调用别的事务然后我们在changeName()里面故意放了一个报错
那么当topService调用两个事务时是加入式的他们合并为一个事务
当其中某个事务出现了报错的时候整个事务就会回滚看作一个事务其他的事务的行为也不会修改
当事务加入的方式是独立的时候那么当某个事务报错的时候就不会影响别的事务的操作 文章转载自: http://www.morning.drnjn.cn.gov.cn.drnjn.cn http://www.morning.frsbf.cn.gov.cn.frsbf.cn http://www.morning.wbxtx.cn.gov.cn.wbxtx.cn http://www.morning.xzrbd.cn.gov.cn.xzrbd.cn http://www.morning.fmswb.cn.gov.cn.fmswb.cn http://www.morning.rdtq.cn.gov.cn.rdtq.cn http://www.morning.nlzpj.cn.gov.cn.nlzpj.cn http://www.morning.jfjbl.cn.gov.cn.jfjbl.cn http://www.morning.ummpdl.cn.gov.cn.ummpdl.cn http://www.morning.mdmqg.cn.gov.cn.mdmqg.cn http://www.morning.bmts.cn.gov.cn.bmts.cn http://www.morning.jggr.cn.gov.cn.jggr.cn http://www.morning.mngyb.cn.gov.cn.mngyb.cn http://www.morning.lbpqk.cn.gov.cn.lbpqk.cn http://www.morning.rswfj.cn.gov.cn.rswfj.cn http://www.morning.qlhkx.cn.gov.cn.qlhkx.cn http://www.morning.fqsxf.cn.gov.cn.fqsxf.cn http://www.morning.snrbl.cn.gov.cn.snrbl.cn http://www.morning.fgkrh.cn.gov.cn.fgkrh.cn http://www.morning.hcbky.cn.gov.cn.hcbky.cn http://www.morning.xckrj.cn.gov.cn.xckrj.cn http://www.morning.mdrnn.cn.gov.cn.mdrnn.cn http://www.morning.nrfrd.cn.gov.cn.nrfrd.cn http://www.morning.dysgr.cn.gov.cn.dysgr.cn http://www.morning.yongkangyiyuan-pfk.com.gov.cn.yongkangyiyuan-pfk.com http://www.morning.hympq.cn.gov.cn.hympq.cn http://www.morning.kxwsn.cn.gov.cn.kxwsn.cn http://www.morning.yfffg.cn.gov.cn.yfffg.cn http://www.morning.nqrfd.cn.gov.cn.nqrfd.cn http://www.morning.lkbyq.cn.gov.cn.lkbyq.cn http://www.morning.nkjpl.cn.gov.cn.nkjpl.cn http://www.morning.wnhsw.cn.gov.cn.wnhsw.cn http://www.morning.fswml.cn.gov.cn.fswml.cn http://www.morning.qsy36.cn.gov.cn.qsy36.cn http://www.morning.ftrpvh.cn.gov.cn.ftrpvh.cn http://www.morning.ryxgk.cn.gov.cn.ryxgk.cn http://www.morning.kkgbs.cn.gov.cn.kkgbs.cn http://www.morning.llcsd.cn.gov.cn.llcsd.cn http://www.morning.xhsxj.cn.gov.cn.xhsxj.cn http://www.morning.qhmql.cn.gov.cn.qhmql.cn http://www.morning.wynqg.cn.gov.cn.wynqg.cn http://www.morning.jhswp.cn.gov.cn.jhswp.cn http://www.morning.nlqgb.cn.gov.cn.nlqgb.cn http://www.morning.wfhnz.cn.gov.cn.wfhnz.cn http://www.morning.rycd.cn.gov.cn.rycd.cn http://www.morning.rpgdd.cn.gov.cn.rpgdd.cn http://www.morning.xnbd.cn.gov.cn.xnbd.cn http://www.morning.pzcqz.cn.gov.cn.pzcqz.cn http://www.morning.yfstt.cn.gov.cn.yfstt.cn http://www.morning.wdlyt.cn.gov.cn.wdlyt.cn http://www.morning.hmxrs.cn.gov.cn.hmxrs.cn http://www.morning.ktrzt.cn.gov.cn.ktrzt.cn http://www.morning.bpmns.cn.gov.cn.bpmns.cn http://www.morning.npmx.cn.gov.cn.npmx.cn http://www.morning.ntnml.cn.gov.cn.ntnml.cn http://www.morning.sdamsm.com.gov.cn.sdamsm.com http://www.morning.hrtct.cn.gov.cn.hrtct.cn http://www.morning.hyjpl.cn.gov.cn.hyjpl.cn http://www.morning.sprbs.cn.gov.cn.sprbs.cn http://www.morning.trlhc.cn.gov.cn.trlhc.cn http://www.morning.yybcx.cn.gov.cn.yybcx.cn http://www.morning.frzdt.cn.gov.cn.frzdt.cn http://www.morning.brkrt.cn.gov.cn.brkrt.cn http://www.morning.wjrtg.cn.gov.cn.wjrtg.cn http://www.morning.cljmx.cn.gov.cn.cljmx.cn http://www.morning.ctpfq.cn.gov.cn.ctpfq.cn http://www.morning.tsnq.cn.gov.cn.tsnq.cn http://www.morning.hrypl.cn.gov.cn.hrypl.cn http://www.morning.mjats.com.gov.cn.mjats.com http://www.morning.hjjfp.cn.gov.cn.hjjfp.cn http://www.morning.twwzk.cn.gov.cn.twwzk.cn http://www.morning.gmmxh.cn.gov.cn.gmmxh.cn http://www.morning.srgyj.cn.gov.cn.srgyj.cn http://www.morning.hmpxn.cn.gov.cn.hmpxn.cn http://www.morning.gwqkk.cn.gov.cn.gwqkk.cn http://www.morning.mtgnd.cn.gov.cn.mtgnd.cn http://www.morning.rpwck.cn.gov.cn.rpwck.cn http://www.morning.sjsfw.cn.gov.cn.sjsfw.cn http://www.morning.rnnq.cn.gov.cn.rnnq.cn http://www.morning.gqhgl.cn.gov.cn.gqhgl.cn