当前位置: 首页 > news >正文

xampp做网站wordpress 建的网站

xampp做网站,wordpress 建的网站,南京广告公司装修,外墙清洗目录 1.什么是Spring 事务 2.Spring 事务的开启方式 3.Spring事务的实现方式/原理 4.事务传播机制 5.事务隔离级别 6.事务失效的原因 1.什么是Spring 事务 事务在逻辑上是一组操作,要么执行,要不都不执行。 如下: Begin; insert into…

目录

1.什么是Spring 事务

2.Spring 事务的开启方式

3.Spring事务的实现方式/原理

4.事务传播机制

5.事务隔离级别

6.事务失效的原因


1.什么是Spring 事务

事务在逻辑上是一组操作,要么执行,要不都不执行。

如下:

Begin;
insert into student values(1,"test",22,"male");
select * from student;
commit;

上述SQL语句,一般情况是一句一句提交并执行;而开启事务后,上述语句会一起提交并执行。

事务操作本来应该由数据库进行控制,但为了方便用户进行业务逻辑的拓展,spring对事务功能进行了拓展实现。

所以,Spring 事务其实是数据库事务的拓展而已。其根本上,还是要连接数据库,并开启数据库事务进行执行或者回滚等操作。

2.Spring 事务的开启方式

Spring支持两种事务方式,分别是编程式事务(用户通过代码来控制事务的处理逻辑)和声明式事务(通过@Transactional注解实现)。一般我们开发中使用声明式事务较多。

	// 默认是RuntimeException就回滚,传播机制为REQUIRED@Transactionalpublic boolean transactionTest(UserAccount user) {try {//业务执行逻辑//userDao.insert(user);int i =0;    //模拟业务出错i = 100 /i;}catch (Exception e){log.error("被除数为0");//事务回滚TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();return false;}return true;}
	//数据源@Autowiredprivate DataSourceTransactionManager dataSourceTransactionManager;//事务@AutowiredTransactionDefinition transactionDefinition;public Boolean execute(){// 手动开启事务TransactionStatus transactionStatus = null;try {//获取事务对象transactionStatus =dataSourceTransactionManager.getTransaction(transactionDefinition);// 具体代码逻辑// 提交事务dataSourceTransactionManager.commit(transactionStatus);} catch (Exception e) {log.error("xxxxxx",e);if (ts != null) {dataSourceTransactionManager.rollback(ts);}throw new RollBackException("业务出错了!");}return true;}

上述代码皆为声明式事务:代码段1中使用@Transactional注解开启,较为便捷;代码段2则是手动开启事务,通过TransactionDefinition对象来开启并提交事务。

3.Spring事务的实现方式/原理

Spring事务是是由AOP来实现的,主要通过TransactionInterceptor类,调用invoke()方法实现具体逻辑。

首先,当一个方法添加@Transactional后,spring会基于这个类生成一个代理对象。

当使用这个代理对象的方法时,解析方法上事务相关的属性,判断是否开启事务。若开启,则把关闭自动提交,开启事务执行具体的业务逻辑。

(invokeWithinTransaction方法中,获取事务属性相关代码,主要判断事务的类型)

如果执行逻辑没有出现异常,那么代理逻辑会通过cmomitTransactionAfterReturning()完成事务的提交,提交的具体逻辑则是由doCommit()实现;

如果出现异常,那么会通过completeTransactionAfterThrowing()进行回滚操作,具体逻辑由doRollBack()实现。同时,用户也可以控制对哪些异常进行回滚操作。

事务执行完毕,会调用cleanupTransactioninfo()清除相关的事务信息。

(invokeWithinTransaction方法中,声明式事务的具体执行逻辑)

4.事务传播机制

事物的传播机制是指不同方法的嵌套调用过程中,事务如何进行处理,事务之间的相互处理关系。比如说,A类中的a方法要调用B类中的b方法,是用同一个事务还是两个事务;出现异常是回滚还是提交。

具体分为7种:以做作业为例进行解释

  1. REQUIRED:默认传播特性,如果当前没有事务,则新建事务;如果当前存在事务,则加入事务。(你做作业,我就抄一下;你没做作业,我就自己做)
  2. SUPPORTS:当前存在事务,则加入事务;当前没有事务,则以非事务方式执行。(你做作业,我就抄一下,你没做作业,我也不做)
  3. MANDATORY:当前存在事务,则加入事务;当前没有事务,抛出异常。(你做作业,我就抄一下,你没做作业,警告你)
  4. REQUIRED_NEW:创建一个新事物,如果当前存在事务,则挂起事务。(不过你有没有做作业,我都自己做)
  5. NOT_SUPPORTED: 以非事务方式执行, 如果当前存在事务,则挂起事务。(大家都不做作业,如果你做了,我把你作业撕掉)
  6. NEVER:不使用事务,如果当前事务存在,抛出异常。
  7. NESTED:如果当前事务存在,则在嵌套事务(设立保存点,保存父事务的状态,出现异常时只有子事务会回滚)中执行,否则与REQUIRED一致。

 一般开发中,使用 required、required_new、nested较多。

5.事务隔离级别

Spring 事务中的事务隔离级与数据库的数据隔离级别是一致的:

Read uncommitted:读未提交;read committed读已提交;repeatable read可重复读;serializable:串行化。

值得一提的是:如果数据库与spring隔离级别不一致,以spring配置为主。

6.事务失效的原因

一些情况下会导致事务失效,可能的原因如下;

  • 1)bean对象没有被spring容器管理。
  • 2)方法的访问修饰符不是public。
  • 3)自身调用问题。
  • 4)数据源没有配置事务管理器。
  • 5)数据库不支持事务。
  • 6)异常被捕捉。
  • 7)异常类型错误或者配置错误。
http://www.yayakq.cn/news/585290/

相关文章:

  • 网站二维码弹窗快手自媒体平台注册
  • 培训类 网站后台wordpress中文版下载
  • 局域网建设网站工具网站制作怎样快速
  • 标题关键词优化技巧seo优化排名是什么
  • 美术类网站建设费用做职业装的网站
  • 重庆企业网站开发服务器临安市规划建设局网站
  • 建网站能多少带宽广州网站营销
  • 网站如何伪静态龙游县住房和城乡建设局网站
  • 做网络网站需要三证么文章类网站选什么内容
  • 怎么选择佛山网站设计哪类网站流量大
  • 中国做的很好的食品网站个人怎么做自媒体
  • 青海省制作网站专业电子商务网站建设成都
  • 搭建网站的流程莱芜东风街吧百度贴吧
  • 网站自己做余额充值自动扣款个人网站主页html5
  • 做问卷调查的网站有啥计算网站制作教程
  • 全国定制网站服务器云主机贵州省住房和城乡建设厅官方网站首页
  • 株洲网站建设费用php网站本地调试
  • 效果图网站大全男女插孔做暖暖网站大全
  • 网站制作广告山西 网站建设
  • 厦门网站建设培训学校深圳有做网站的公司有哪些
  • 加强三农网站建设的意义wordpress新版无法保存
  • 网站建设交流qq淘宝怎么下载视频
  • 网站建设需求填表成都做网站的公司哪家好
  • 广州网站制作建设搜一下百度
  • 做网站能用的字体dw网页制作素材+教程
  • 网站开发参考文献2015年后建筑资料免费下载网站
  • 网站的分页效果怎么做眉山做网站
  • 企业网站建设国内外差异wamp网站根目录配置
  • 手机免费创建网站的软件旅游网站有哪些
  • 南通网站建设方案服务微网站搭建费用