IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringFramework--第五天 事务管理 -> 正文阅读

[Java知识库]SpringFramework--第五天 事务管理

Spring的事务管理

目录

Spring的事务管理

一、事务的定义?

二、事务的四大特征

1.原子性

2.一致性

3.隔离性

4.持久性?

三、事务引发的问题?

四、事务的隔离级别?

五、事务的管理原理

1.PlatfromTransactionManager ---平台事务管理器

2.TransactionDefinition(事务的定义)?

3. TransactionStatus--事务状态

总结

?六、事务的七种传播行为(Propagation)

七、编程式事务管理

八、声明式事务管理

? 1.基于xml的事务管理

? 2.基于注解的事务管理

九、spring整合日志框架

1. log4j

2. log4j2


一、事务的定义?

事务是一组最小的逻辑单元,这组单元中的操作要么全部执行成功,要么全部失败

二、事务的四大特征

1.原子性

事务是最小单元,不可分割

2.一致性

3.隔离性

事务之间互不影响

4.持久性?

事务一旦提交,数据会持久化到数据库中


三、事务引发的问题?

  • ?脏读 :一个事务读到了另一个事务没有提交的数据
  • 虚读(幻读): 读同一张表,多次读取行数不一致
  • 不可重复读 :查同一条数据,多次读取结果不一致

四、事务的隔离级别?

read uncommited??

?未提交读(无法解决任何问题)

read commited

已提交读(解决了脏读的问题)

repeatable read??

可重复读。解决了虚读

serializeable

串行化,使用了嵌套事务解决了所以问题

数据库的默认隔离界别

mysql---- repeatable read

oralce、selserver默认 read commited

五、事务的管理原理

1.PlatfromTransactionManager ---平台事务管理器

用于规范如何管理事务?

?接口:? ?

? ? ? ? ? ? ?JdbcTransactionManager? :基于jdbc的平台事务管理器

? ? ? ? ? ? ?HibernateTransactionManager:基于hibernate的平台事务管理器,导入spring-orm.jar? 用于整合ORM框架

2.TransactionDefinition(事务的定义)?

定义了事务的相关属性

3. TransactionStatus--事务状态

? ?hasSavePoint 是否包含有回滚点

? ?isNewTransaction 是否为新的事务

? ?isCompleted 事务是否已经完成

总结

平台事务管理器根据自身不同,选择相应的方式来创建事务,并将创建后事务的信息,保存在TransactionDefinition中,事务在执行的过程中,会发生状态的变化,平台事务管理器会将状态的变化记录在TransactionStatus中

?六、事务的七种传播行为(Propagation)

? ?REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择

? ?SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行

? ?MANDATORY:支持当前事务,如果当前没有事务,就抛出异常

? REQUIRE_NEW:新建事务,如果当前存在事务,就把当前事务挂起

?NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,就把当前事务挂起

?NEVER:以非事务方式执行,如果当前存在事务,则抛出异常

NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务

七、编程式事务管理

? ?1.根据dao的底层技术选择对应的事务管理平台---我们一般都是使用JdbcTransactionManage

<!-- 平台事务管理器 --> 
<bean id="transactionManager" class="org.springframework.jdbc.support.Jdb cTransactionManager">
 <property name="dataSource" ref="dataSource"></property> 
</bean>

2.创建TransactionTemplate(事务管理模板)的bean??

<!-- 
提供了事务管理的相关操作 采用了数据库默认的隔离级别 采用了spring默认的传播行为 Propagtion_required 
 property---- 设置要用的事务管理平台
--> 
<bean id="transactionTemplate" class="org.springframework.transaction.supp ort.TransactionTemplate">
 <property name="transactionManager" ref="transactionManager"></property> 
</bean>

3.测试

	//测试事务   ---编程式事务管理
	@Autowired
	private TransactionTemplate transactionTemplate;
		@org.junit.Test
		public void testTranction() {
			transactionTemplate.execute(new TransactionCallback<Object>() {
				@Override
				public Object doInTransaction(TransactionStatus arg0) {
					   Account account1=new Account();
					   account1.setUserId(5);
					   account1.setAccount(-400);
					   account1.setOperateDate("2022-7-12");
					   accountDao.save(account1);
					   int i=1/0;
					   Account account2=new Account();
					   account2.setUserId(6);
					   account2.setAccount(400);
					   account2.setOperateDate("2022-7-12");
					   accountDao.save(account2);
					   return null;

?缺点:改变了业务逻辑的结构

八、声明式事务管理

在spring中提供了事务管理,采用AOP的形式,对切入点进行事务的增强,并且spring提供了事务增强的标签,只需要通过配置就能够实现事务管理

? 1.基于xml的事务管理

1. 平台事务管理器
<!-- 平台事务管理器 --> 
<bean id="transactionManager" class="org.springframework.jdbc.support.Jdb cTransactionManager">
 <property name="dataSource" ref="dataSource"></property> 
</bean>

2. 增加 tx 标签, spring 提供的增强、
<!-- 事务的增强 transaction-manager:指定增强采用的平台事务管理 器 --> 
<tx:advice id="tx" transaction- manager="transactionManager">
 <!-- 事务的属性的配置--> 
<tx:attributes>
 <!-- 在切入点的基础上对不同的方法进行不同的事务配置 -->
<tx:method name="insert*" isolation="DEFAULT" propagation="REQUIRED"/> 
<tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED"/> 
<tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED"/> 
<tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED"/> 
<tx:method name="remove*" isolation="DEFAULT" propagation="REQUIRED"/> 
<!-- read-only:true可以提高查询效率 --> 
<tx:method name="query*" read- only="true" isolation="DEFAULT" propagation="REQUIRED"/> <tx:method name="select*" read- only="true" isolation="DEFAULT" propagation="REQUIRED"/>
<tx:method name="transfer" propagation="REQUIRED"/> 
</tx:attributes> 
</tx:advice>

3.aop 配置、
<aop:config>
  <!--切入点表达式-->
 <aop:pointcut expression="execution(* com.sofwin.service.impl.*.*(..))" id="p1"/> 
  <!-- 增强的方法 tx    切入点表达式p1-->
 <aop:advisor advice-ref="tx" pointcut- ref="p1"/> 
</aop:config>

注意
因为spring的声明事务采用的AIP
1.所以同类中的方法调用会导致事务失效
? ?
class Service1{ 

a(){ }
b(){ }
c(){
a() 
int i=1/0; 
b() 
}

? ?要这样改动--才不会失效

class Service1{
 @autoWird Service1 service; 
a(){ }
b(){ }
c(){
service.a() 
int i=1/0; 
service.b() }

2.不是public修饰的方法--会失效

3.被final修饰的方法---会失效

? 2.基于注解的事务管理

? ? 1.定义平台事务管理器

<!-- 平台事务管理器 --> 
<bean id="transactionManager" class="org.springframework.jdbc.support.Jdb cTransactionManager">
 <property name="dataSource" ref="dataSource"></property> 
</bean>

? ? 2.开启事务的注解驱动和注解的组件扫描

  <context:component-scan base-package="com.sofwin"></context:component-scan>
 <tx:annotation-driven transaction-manager="jdbcTransactionManager"/>

?3.常用的注解

@Transactional?

?类级别:该类中所以方法使用了定义的事务

?方法级别:该方法使用了定义的事务

九、spring整合日志框架

早期 spring 版本中不包含 jcl, 提供了日志的接口,整合日
志的实现。

1. log4j

log4j.jar
log4j.properties

2. log4j2

log4j-core.jar
log4j-api.jar
增加: log4j2.xml
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:38:23  更:2022-07-20 18:42:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:55:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码