当前位置:   article > 正文

基于Spring的声明式事务_在spring中,使用声明式事务的方式

在spring中,使用声明式事务的方式

什么是事务?

把一组业务当成一个业务来做;要么都成功,要么都失败,保证业务操作完整性的一种数据库机制。

Spring JdbcTemplate配置并测试数据源

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
连接数据库的配置文件

在这里插入图片描述
xml配置
在这里插入图片描述
注意:spring容器提供了一个JdbcTemplate类,用来方便操作数据库。
可以在xml配置文件里面加上,将其注册为bean组件

使用JdbcTemplate对数据库进行基本的增删改查

测试DruidDatasource有没有连接上
在这里插入图片描述
增删改查
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

声明式事务

ACID 四大特性
A 原子性:原子性指的是 在一组业务操作下 要么都成功 要么都失败
在一组增删改查的业务下 要么都提交 要么都回滚
C 一致性:事务前后的数据要保证数据的一致性
在一组的查询业务下 必须要保证前后关联数据的一致性
I 隔离性:在并发情况下 事物之间要相互隔离。
D 持久性:数据一旦保存就是持久性的
声明式事务:在方法的外部添加注解或者直接在配置文件中定义,将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。spring的AOP恰好可以完成此功能:事务管理代码的固定模式作为一种横切关注点,通过AOP方法模块化,进而实现声明式事务。

注意:

@Transactional注解应该写在哪:
@Transactional 可以标记在类上面(当前类所有的方法都运用上了事务)
@Transactional 标记在方法则只是当前方法运用事务
也可以类和方法上面同时都存在, 如果类和方法都存在@Transactional会以方法的为准。
如果方法上面没有@Transactional会以类上面的为准
建议:@Transactional写在方法上面,控制粒度更细, 建议@Transactional写在业务逻辑层上,因为只有业务逻辑层才会有嵌套调用的情况

设置隔离级别(isolation)

用来解决并发事务所产生一些问题:
并发: 同一个时间,多个线程同时进行请求。
什么时候会生成并发问题:在并发情况下,对同一个数据(变量、对象)进行读写操作才会产生并发问题
并发会产生什么问题?
1.脏读
2.不可重复度
3.幻影读
解决方法:
一 脏读

  1. 一个事务,读取了另一个事务中没有提交的数据,会在本事务中产生的数据不一致的问题
    解决方式:@Transactional(isolation = Isolation.READ_COMMITTED)
    二 不可重复读
    2.一个事务中,多次读取相同的数据, 但是读取的结果不一样, 会在本事务中产生数据不一致的问题。
    解决方式:@Transactional(isolation = Isolation.REPEATABLE_READ)
    三 幻读
    一个事务中,多次对数据进行整表数据读取(统计),但是结果不一样, 会在本事务中产生数据不一致的问题。
    解决方式:@Transactional(isolation = Isolation.SERIALIZABLE)
    很多人容易搞混不可重复读和幻读,确实这两者有些相似:
    对于前者, 只需要锁行
    对于后者, 需要锁表

spring事务的传播行为:

注意:一般最经常使用的就是这三个

这些了解一下即可

超时属性(timeout)

设置超时属性为2秒,此线程停留了三秒,已经超时,故会报TransactionTimedOutException
注意:一般基于注解来实现事务的话,在方法上加上 @Transactional注解就行,如果需要加什么属性,再额外加上即可

基于xml的事务配置

在这里插入图片描述
注意:xml的事务配置可以和注解的事务配置同时使用,如果同时使用,注解的优先级更高

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/707725
推荐阅读
相关标签
  

闽ICP备14008679号