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

北京高端网站建设公司全国疫情高峰时间表最新

北京高端网站建设公司,全国疫情高峰时间表最新,三亚西岛,只做绿色食品的网站声明式事务概念 声明式事务是指使用注解或 XML 配置的方式来控制事务的提交和回滚。 开发者只需要添加配置即可, 具体事务的实现由第三方框架实现,避免我们直接进行事务操作! 使用声明式事务可以将事务的控制和业务逻辑分离开来,提…

声明式事务概念

  声明式事务是指使用注解或 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 i=1/0;System.out.println("-----------");studentDao.updateNameById("test1",1);}
}

超时时间

我们假设有如下代码,我们设置超时时限为3,然后我们使得这个线程休眠4000,于是当我们执行后就会发生以下错误

@Transactional(readOnly = true,timeout = 3)public void changeInfo(){studentDao.updateAgeById(100,1);int i=1/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 i=1/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):最高的隔离级别,完全禁止了并发,只允许一个事务执行完毕之后才能执行另一个事务。可以避免以上所有问题,但效率较低,不适用于高并发场景。

    不同的隔离级别适用于不同的场景,需要根据实际业务需求进行选择和调整。

  1. 脏读(Dirty Read):一个事务可以读取另一个事务尚未提交的数据。如果该数据后来被回滚,那么第一个事务读取到的数据就是“脏”的。脏读通常发生在读未提交隔离级别下。

  2. 不可重复读(Non-repeatable Read):在一个事务中,两次读取同一数据时,数据内容不同。这是因为在两次读取之间,另一个事务修改并提交了该数据。不可重复读通常发生在读已提交隔离级别下。

  3. 幻读(Phantom Read):一个事务在读取某范围的数据时,另一个事务在该范围内插入了新数据,导致前一个事务再次读取时,发现多了“幻影”行。幻读通常发生在可重复读隔离级别下。

在代码中,我们可以这样设置事务的隔离性

事务传播

事务传播的定义

指的是事务之间的调用,叫做事务传播,比如下列图片中的业务方法1调用业务方法2,这叫做事务的传播,我们一般将事务的传播属性设置到子事务上

事务的传播属性有

1.假如父事务

2.不加入父事务

注解方式规定事务传播

通过在@Transactional注解里面,添加一个propagation注解设置事务的传播行为,

那么设置事务的传播行为有什么用呢?举个例子,在topService()事务里面,调用别的事务,然后我们在changeName()里面故意放了一个报错,

那么当topService调用两个事务时,是加入式的,他们合并为一个事务

当其中某个事务出现了报错的时候,整个事务就会回滚,看作一个事务,其他的事务的行为也不会修改

当事务加入的方式是独立的时候,那么当某个事务报错的时候,就不会影响别的事务的操作

http://www.hengruixuexiao.com/news/41920.html

相关文章:

  • 景安 怎么把网站做别名企业网站建设的重要性
  • 学什么可以做网站最新新闻热点事件2023
  • 上海网站建设 销售百度浏览器极速版
  • 东莞寮步网站设计百度最新财报
  • 国家政务服务平台官网网站怎样关键词排名优化
  • 吉林省高等级公路建设局网站上海培训机构整顿
  • 廊坊网站群建设下载百度app到手机上
  • 环保网站模板 html百度指数爬虫
  • 网站开发和游戏开发网站友情链接购买
  • 购物网站建设工作流程百度关键词优化平台
  • 导航网站建设双11销量数据
  • 福州新闻网首页宣城网站seo
  • 宁远做网站msoer友情链接名词解释
  • 安徽禹尧工程建设有限公司网站广州竞价托管代运营
  • 西安seo搜推宝济南seo排行榜
  • 网站 做英文 翻译 规则seo多久可以学会
  • 手机端网站设计模板提高seo排名
  • 市通建设工程质量监督局网站百度快照投诉
  • 老外把金文做的网站翻译叫什么故事型软文广告
  • 设计手机商城网站建设seo网络优化培训
  • 网站是如何盈利的武汉seo首页
  • 网站建设文化怎么样网优工程师前景和待遇
  • wordpress 优化seo插件关键词优化排名要多少钱
  • 外贸营销型网站建设开网店哪个平台靠谱
  • 建设一个网站的操作流程300字什么是外链
  • 聚通装潢口碑好不好东莞搜索优化十年乐云seo
  • 做教程的网站内容怎么找怎么做网站?
  • 门户网站建设需求模板百度一下官网搜索引擎
  • 萌宝宝投票网站怎么做淘宝推广怎么推
  • 免费校园网站建设鸡西网站seo