在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
今天让我们走进声明式事务控制的学习,具体内容包括编程式事务控制相关对象,基于 XML 的声明式事务控制以及基于注解的声明式事务控制。对声明式事务控制感兴趣的同学,赶紧一起来看看小编整理的学习笔记吧!
一、编程式事务控制相关对象
1、PlatformTransactionManager 接口是 spring 的事务管理器,它里面提供了我们常用的操作事务的方法。
2、TransactionDefinition
TransactionDefinition 是事务的定义信息对象,里面有如下方法:
(1)事务隔离级别:设置隔离级别,可以解决事务并发产生的问题,如脏读、不可重复读和虚读。
(2)事务传播行为
REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般的选择(默认值)。
SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)。
MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常。
REQUERS_NEW:新建事务,如果当前在事务中,把当前事务挂起。
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
NEVER:以非事务方式运行,如果当前存在事务,抛出异常。
NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行 REQUIRED 类似的操作。
超时时间:默认值是-1,没有超时限制。如果有,以秒为单位进行设置。
是否只读:建议查询时设置为只读。
3、TransactionStatus
TransactionStatus 接口提供的是事务具体的运行状态,方法介绍如下。
二、基于 XML 的声明式事务控制
1、声明式事务控制是什么?
Spring的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明,就是指在配置文件中声明,用在 Spring 配置文件中声明式的处理事务来代替代码式的处理事务。它的作用是事务管理不侵入开发的组件。具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划的话,也只需要在定义文件中重新配置即可。而且在不需要事务管理的时候,只要在设定文件上修改一下,即可移去事务管理服务,无需改变代码重新编译,这样维护起来极其方便。
2、声明式事务控制的实现
(1)引入tx命名空间
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
(2)配置事务增强
<!--平台事务管理器-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--事务增强配置-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
(3)配置事务 AOP 织入
<!--事务的aop增强-->
<aop:config>
<aop:pointcut id="myPointcut" expression="execution(* com.itheima.service.impl.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"></aop:advisor>
</aop:config>
(4)测试事务控制转账业务代码
public void transfer(String outMan, String inMan, double money) {
accountDao.out(outMan,money);
int i = 1/0;
accountDao.in(inMan,money);
}
三、基于注解的声明式事务控制
1、注解配置声明式事务控制
(1)编写 AccoutDao
@Repository("accountDao")
public class AccountDaoImpl implements AccountDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void out(String outMan, double money) {
jdbcTemplate.update("update account set money=money-? where name=?",money,outMan);
}
public void in(String inMan, double money) {
jdbcTemplate.update("update account set money=money+? where name=?",money,inMan);
}
}
(2)编写 AccoutService
@Service("accountService")
@Transactional
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountDao accountDao;
@Transactional(isolation = Isolation.READ_COMMITTED,propagation = Propagation.REQUIRED)
public void transfer(String outMan, String inMan, double money) {
accountDao.out(outMan,money);
int i = 1/0;
accountDao.in(inMan,money);
}
}
(3)编写 applicationContext.xml 配置文件
<!—之前省略datsSource、jdbcTemplate、平台事务管理器的配置-->
<!--组件扫描-->
<context:component-scan base-package="com.itheima"/>
<!--事务的注解驱动-->
<tx:annotation-driven/>
以上就是声明式事务控制的学习笔记整理,如果大家还有什么不懂的地方,可以上博学谷报名JavaEE在线就业班,有线上的老师为大家提供一对一的辅导答疑,现在就去体验试听课程吧~
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
如何激活IDEA?新手激活教程
Java的开发者都知道IDEA是一款常见且公认最好的Java开发工具,很多eclipse或者myeclipse的用户也正在使用着IDEA,它在智能代码助手、重构、各类版本工具、代码自动提示、代码分析等方面被广泛使用。既然IDEA如此好用,那么如何激活IDEA开始使用呢?本文就为大家介绍新手激活IDEA的教程,感兴趣就赶紧看下去吧!
8518
2019-11-01 14:57:00
JavaWeb开发XML学习笔记整理
JavaWeb开发能力是Java程序员的必备基础能力,因此掌握它十分重要。今天本文要和大家分享的是JavaWeb开发中有关XML学习笔记的整理。主要内容包括了XML的概念、XML的语法、约束和解析。感兴趣的朋友就一起来看看吧!
4933
2020-04-03 00:40:49
Java程序员Dubbo面试题整理附答案
Dubbo作为国内最主流和常见的分布式服务框架,是Java程序员必须要熟练掌握的框架。虽然Consul正在崛起,但Dubbo又开始重新更新,因此目前市场上仍有不少公司使用Dubbo。在Java岗位的面试中,Dubbo更是会被经常问到的技术难点,因此无论你在哪家公司面试,都必须熟悉Dubbo的相关知识点。本文为大家整理了一些Java程序员常见的Dubbo面试题,并附上了参考答案,一起来做做吧!
4936
2020-04-15 17:19:27
零基础学Java可以学会吗?
现如今IT行业已经成为高薪行业的代表,人们对于编程技术也越来越关注,在几百门编程语言中,Java编程语言近十年一直是最受开发工作者以及用人单位所追捧的。但是相对于PHP、Python等编程语言,Java的学习难度相对较大,因此很多新入行的同学都会发出同样的疑问:零基础学Java可以学会吗?
3601
2020-07-16 18:00:54
Java字节流输入输出数据的常用方法介绍
字节流由字节组成,在计算机中无论是文本、图片、音频还是视频所有文件都是以二进制(字节)形式存在,根据数据的传输方向可将其分为字节输入流和字节输出流。
3605
2021-04-23 13:53:46