在线客服
扫描二维码
下载博学谷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的教程,感兴趣就赶紧看下去吧!
8941
2019-11-01 14:57:00
Dubbox服务消费方开发详解
众所周知,。通过Dubbo可以创建服务消费方的应用,实现服务消费方远程调用服务提供方的方法。下面一起来看看Dubbox服务消费方开发详解,具体内容包括六个详细的开发步骤。
5003
2020-05-28 16:25:37
自学Java应该注意避免哪些误区?
众做周知,Java是编程语言中的王者,它在服务器编程语言占比超过91%,其就业岗位覆盖各个经济领域,毫不夸张地说,中国IT行业的未来发展离不开Java语言。因而Java受到了众多编程开发者的喜爱,Java学习人群也在日益壮大。为了帮助大家可以更高效地学习Java,本文总结了自学Java应该注意的误区,希望大家都能够避免走这些弯路。
4657
2020-07-21 18:04:52
学Java编程数学一定要很好吗?
数学好不好对于学Java编程没有特别的限制,编程要一定的逻辑思维能力,数学好说明逻辑思维能力强,对学好编程很有帮助,但对学编程有兴趣,即使数学不好但在学习编程的过程中会促使你去学好数学,两者相互促进。
4591
2020-10-21 14:47:43
学Java需要具备哪些前提条件?
很多零基础的学员对于学Java比较迷茫,不知道入门需要具备哪些条件,不知道怎么去学习,想通过学Java掌握一技之长。无论是以何种方式去学习Java 看书或视频还是去培训班,遇到问题都要及时解决,
4217
2021-01-20 14:38:22