在线客服
扫描二维码
下载博学谷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在线就业班,有线上的老师为大家提供一对一的辅导答疑,现在就去体验试听课程吧~
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Java课程设计题目有哪些?Java课程设计题目汇总
在学习Java的路上,多多练习项目实践是很有必要的。因此,本文整理了20道Java课程设计题目,希望大家总结、回顾和实践学过的所有面向对象的编程思想以及编程方法。
19273
2019-07-29 11:34:42
提高Java开发效率的十个编程好习惯
对于刚刚入门学习Java编程语言的初学者而言,学习Java的基础语法固然重要,养成良好的编程习惯也是在一开始就需要注意的学习重点。只有在一开始建立好基础的习惯,才能在后期的Java开发中,提高自己的编码水平和效率。在这里小编整理了提高Java开发效率的十个编程好习惯供大家参考,下面一起来看看吧!
4950
2020-03-02 14:29:25
自学Java看培训视频效果好吗?
自学Java看培训视频效果好吗?现在Java作为编程开发的主流语言,吸引着许多年轻人想要学习Java编程语言。但是零经验的小白又会有许多困惑,自学Java可以吗,自学是看书就行还是要看培训视频比较好。
4542
2020-06-10 14:14:57
学Java的女生好找工作吗?适合编程吗?
在很多人认为女生不适合从事Java工作,Java工作的人逻辑性要求高,且专业操作水平要高,而女生在这方面比较弱。其实这只是一种偏见,女生也可以从事Java工作,且还能发挥自己的优势把Java编程工作做得更好。
4585
2021-01-11 17:12:03
学Java需要具备哪些前提条件?
很多零基础的学员对于学Java比较迷茫,不知道入门需要具备哪些条件,不知道怎么去学习,想通过学Java掌握一技之长。无论是以何种方式去学习Java 看书或视频还是去培训班,遇到问题都要及时解决,
3597
2021-01-20 14:38:22