范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Spring事务

  使用Spring事务
  Spring事务介绍
  Spring事务的特点:
  1. 多种事务API,Spring事务都可兼容;
  2. 程序接入简单;
  3. 与已有的Spring框架集成。
  支持的事务API如下:
  Spring事务使用代码如下:@Transactional  @Override  public void testTransactional(Integer id) {  		demoDao.remove(id);  }
  此为Service实现类中的一个实现方法
  Spring事务引入
  那么Spring中使用事务,我们要做的是:
  对要使用事务的类或者方法,添加注解`@Transactional`。支持事务元数据设置,比如传播特性,回滚设置等,通过AOP将设置生效。
  增加配置:`@EnableTransactionManagement`,来开启Spring中注解驱动的事务管理能力。Spring Boot中默认开启,不需要加该注解。
  一般是在Service层添加事务,然后其他层或者其他Service类来调用该事务类。
  Transaction API:JDBC
  一直使用的JDBC Driver来连接数据库。
  开启Spring事务之前,先看事务作用于什么?是对于数据库层来说。
  那么程序与数据库层发起一次事务如何来实现呢?首先来看Java程序与数据库的交互,是通过JDBC(Java database connectivity)来展开。JDBC是API形式,定义了客户端如何访问数据库。
  JDBC API的实现则有JDBC Driver Manager。在pom文件中,有引入过此Jar包。使用过程中,有一个连接池,来管理可用的JDBC connection。那么程序就可通过JDBC Driver来发起事务,其中事务与一个JDBC connection相关联。
  事务的过程实现代码类似于:import java.sql.Connection;   Connection connection = dataSource.getConnection(); // (1)   try (connection) {     connection.setAutoCommit(false); // (2)     // execute some SQL statements...     connection.commit(); // (3)   } catch (SQLException e) {     connection.rollback(); // (4) }
  可以看到事务的过程为,获取数据库连接,取消自动提交,执行SQL逻辑,然后控制正常提交,异常回滚。
  Spring事务默认设置
  默认的事务能力是:传播机制是`REQUIRED`,即当前无事务时新建一个事务,当前存在事务,则加入该事务中。隔离级别是`DEFAULT`,即使用数据库默认的隔离级别,那么数据库层默认的隔离级别是`REPEATABLE_READ` (可重复读)。transaction is read-write。服务于传播机制,相对应的read-only来表明只做只读操作。默认超时时间,跟随底层事务服务提供方,如果不支持超时逻辑则没有。我们使用的默认超时时间是50s。回滚机制适用于`RuntimeException`。checked Exception不会触发。Spring事务实现
  @Transactional实现逻辑
  Spring事务是对多种Transaction API的封装,那么基于JDBC实现的封装后,通过增加`@Transactional` 注解来实现,简化了用户的使用流程。
  分析事务过程中,每次变化的是执行SQL的逻辑部分。分析如下:
  Spring 提供Proxy层来实现,开启事务和关闭事务,中间过程再调用业务逻辑,即,Real UserService的userDao.save()部分。为什么说是Real?
  在Spring中我们要对某个类或者方法添加事务时,可以直接在其上添加注解 @Transactional。
  Spring内部的实现,则是依赖IoC和AOP特性。
  对含有@Transactional注解的类或者方法,提供一层Proxy实现。通过AOP实现了关联。
  对于含有@Transactional的bean,IoC容器会对该bean初始化一个代理类,也就是上面的UserService Proxy。该proxy内部对实际的service调用,实现其业务逻辑。使用时因为IoC特性,调用相应的proxy类而不是实际 service,对内部的代理逻辑我们无感知。
  那么从程序侧,实现了对事务的开启和关闭的封装,而事务与数据库连接相关联,此处Spring对数据库连接则封装在TransactionManager中,常用的功能类是PlatformTransactionManager。此处的调用逻辑如下图:
  `ReactiveTransactionManager`是响应式功能类
  Spring事务手动控制
  在一些场景下,不可用注解`@Transactional`来控制事务,需要引入手动控制逻辑时,Spring提供了封装类`TransactionTemplate`。也是对`PlatformTransactionManager`的封装,简化使用流程,类似于RedisTemplate等等。@Service public class UserService {          @Autowired         private TransactionTemplate template;            public Long registerUser(User user) {                 Long id = template.execute(status ->  {                         // execute some SQL that e.g.                         // inserts the user into the db and returns the autogenerated id                         return id;                     });         }  }
  不必自己打开或者关闭数据库连接,并且Spring会将`SQLExceptions`转换为`RuntimeException`。Spring事务封装类
  Spring事务实现类
  类结构如图:
  AOP执行类:TransactionAspectSupport,内部是调用TransactionManager来实现事务逻辑。
  Spring对事务的封装逻辑,通过类`PlatformTransactionManager`,将指定`DataSource`的`JDBC Connection`绑定到当前线程。
  当使用`DataSource.getConnection()`时,并不是Spring封装支持的形式,可以定义`TransactionAwareDataSourceProxy`代理目标`DataSource`,在DAO层中使用该proxy类,可实现Spring的事务管理。
  `LazyConnectionDataSourceProxy`该代理类也实现了Spring的事务管理,它的优势是当要执行语句时,才从目标数据源获取连接。
  Spring事务的不同封装层级
  通过Spring封装对数据库的访问,我们可以正确创建、重用和清理持久性API资源(比如JDBC,Hibernate或JPA等),完成`DataSourceTransactionManager`到JDBC DataSource或者`HibernateTransactionManager`到Hibernate SessionFactory的事务链接到相关资源,实现Spring管理的事务。
  Spring提供了不同封装层级的数据访问操作类,使用其会支持Spring事务。如下图:
  Spring事务不生效原因基于上面的逻辑,梳理出常见的事务不生效的原因有:默认设置下,开启事务的方法必须是public。类内部自调用,AOP代理不生效。初始化时不生效,比如在@PostConstruct中。依赖IoC逻辑将proxy完全初始化以提供能力。抛出的异常是否是RuntimeException。SpringBoot项目中使用多数据源切换时,TransactionManager类中加载的是否是当前数据源。Spring项目中,使用低层级的数据源访问方式时,检查数据源封装是否是Spring事务支持的代理类。

初中就寄宿对孩子好吗?为什么?个人认为,初中生住校还是比较好的。我自己读初中的时候,就是住校的。家里离镇上学校有五公里,必须得住在学校,那时候叫内宿生,学校附近的学生就不用住校,叫外宿生。读初中,年龄已经有十三退休后你们在家都干什么?刷手机?跳广场舞?看孩子?好迷茫?我退休了,平时没事刷刷手机,旅游是我的最爱,只是疫情的原因,不能乱跑了!不跳广场舞!退休了吧你以为就安心了!不是的!我们退休前努力为了自己的社保在打拼,自然而然的退休后还是会继续,杭州现在实行积分落户,外地人把户口转过来,好不好呢?杭州积分落户新政策,具体规则和加分细节公布!最近浙江省人民政府官网发布了关于杭州积分落户最新的消息,让很多人炸开了锅了!2021年下半年杭州积分落户的分数线竟然是160分,而202买那么多年彩票都不中,你还能为福利事业贡献几年?我开体彩有一段时间了,我给大家说一下中奖的那些事情。1。大乐透,这个可遇不可求的大奖,1000万,追加也就是多花一元钱,就可以达到1800万的大奖。它开出来的号码都是大家打的最少的聚餐时,你都看透了哪些复杂的人心?1,聚餐做最后一个走的人。2,聚餐时,总有人会不辞而别。3,有些人会出去外面放松。4,当同事组织聚餐,有人不愿去时,总是会被人勉强,不去都不行。5,物以类聚人以群分,你会发现每个人中级和副高的工资差距有多大?东北省会城市普通事业单位中级绩效工资2525元岗位工资10级岗1810元钱9级岗1960元8级岗2200元高级岗(副高)绩效工资3040元岗位工资7级岗2500元6级岗2710元5平安银行信用卡电话催收态度极其恶劣,该怎么应对?没有里子的时候,要面子干嘛用?首先接受催收,你不还款在先,难道就不让他们催收?其次,他打你通讯录和单位电话,你也只能让他们打,你越在催收面前表现出恐惧,他们越会在你这个痛的地方撒盐农村人为何出来打工却不在家搞养殖?我家是农村的,父母养蚕20多年了,每年也有15万左右的收入,但是我却不愿在家养蚕,宁愿在外面上班2000多元一个月。因为养蚕实在太累,我们这一代年轻人吃不了那种苦。这里是四川大凉山为什么不能在农村养猪养鸡,几千年的传统都是错的吗?养猪养鸡对于农民来说只是一种副业,它是我国劳动人民在种地以外的另一份收入,是维持家庭开支的主要一部分。在贫穷的年代,柴米油盐的购买就是依靠养猪和鸡来维持的,再穷的人养不起猪那也得养有人说彩票中奖一个亿,不见得是一件好事情。请问说的有道理吗?别说一个亿,就是几十万几百万都不一定是件好事。我们当地有个出租车驾驶员中了双色球二等奖10多万元,俩口子激动得关起门来喝酒庆祝,结果双双喝进了医院,男的没抢救过来走了,喜事变成了丧我想问一下在监狱服刑期间想抽烟了怎么办?犯人在监狱服刑期间,抽烟除了在工作时有限制以外,业余时间抽烟是没有限制的。监狱与看守所的不同之处就在于,监狱相对于看守所来说,活动范围能大一些,伙食水平能高出许多,抽烟也不会被限制
国民党高官写文痛骂毛主席,主席却十分赞赏全军转载,奇文共赏1946年9月,国民党撕毁停战协定,公然发动集宁战役并偶然取胜,傅作义兴高采烈在奋斗日报上刊登了一篇由国民党高官阎又文撰写的致毛泽东的公开电。文中尽是讥讽嘲笑之语,什么被包围被击溃ampampquot抗日不上将,红军不下校ampampquot,55年这条授衔标准,为此多出3000少校55年我军评定军衔标准是什么,何谓抗日不上将,红军不下校?1949年,中华人民共和国成立。枪杆子里面出政权,为中华人民共和国政府成立立下最大功劳的,是人民解放军,他们是建国最大的功近60天新机横向全对比,你选哪个?(折叠屏游戏手机篇)此前,我们横向对比了过去两个月中发布的中端机型以及传统旗舰。今天,我们继续来进行高端手机中的细分领域新机对比,即折叠屏旗舰和游戏手机横向对比。在过去的两个月中,陆续亮相了小米MIX华为带不动学渣在华为的车企朋友圈里,已经出现好学生和差学生的分化。9月1日,华为与赛力斯合作的AITO问界发布了今年8月份的产销数据。数据显示,问界系列8月份的交付量达到了10,045辆,同比增扛不住了!台积电想要关闭EUV光刻机,外媒麻烦来了点击关注,每天精彩不断!导读扛不住了!台积电想要关闭EUV光刻机,外媒麻烦来了!众所周知,台积电是全球第一大的芯片生产巨头企业,在整个芯片市场上拥有着很高的话语权在张忠谋的带领下,2000价位手机,12GB256GB配置,骁龙870天玑8100该选哪个?在手机消费领域,已经不再是看芯片为主的时期了。毕竟提高30的极限性能,还不如把散热电池拍照存储等协调处理好。作为消费者较为看重的2000价位,已经下沉了不少强有竞争力的机型,这些机华为Mate50创新应急模式没电也能打电话9月6日下午,华为Mate50系列正式发布,在续航方面又有新的突破。据余承东介绍,华为Mate50系列支持创新应急模式,在近乎没电的情况下,依然可以通话扫码。根据华为实验室测试结果房产交易平台逐步进军家装平台房产交易平台贝壳能做成家装平台吗?这是这两年家装圈企业家问我最多的问题之一,谁能真正做成家装界的平台关系到未来家装界的格局,也就关系到每一个家装公司的生意前景。贝壳内部人士也很好奇又悄悄涨价,充一小时需6元!共享充电宝变身价格刺客,你还在用吗?共享充电宝集体涨价遭遇价格刺客,共享充电宝也快用不起了!最近,共享充电宝再次因价格上涨引发关注。据媒体报道,不少城市的共享充电宝价格已涨至34元小时,最高的可达10元小时。一共享充号外,华为Mate50Pro竟是4G版骁龙8SoC,跑分数据曝光昨晚酷安达人那片梧桐那场雨爆料了华为Mate50Pro的跑分现身Geekbench5数据库,机型信息显示处理器主频3。19GHz,参数与骁龙8处理器完全一致,制程工艺存疑。其他信息英伟达高端GPU供货受限?自动驾驶域控制器相关企业不涉及被限制芯片21世纪经济报道记者赵云帆上海报道9月1日,自动驾驶概念企业德赛西威(002920。SZ)破位下跌4。44,创近一个月新低中科创达(300496)下跌3。22,创两个月来新低。自动