springboot xml声明式事务管理方案
在开发过程中springboot提供的常见的事务解决方案是使用注解方式实现。
使用注解
在启动类上添加注解
@EnableTransactionManagement
在需要事务控制的方法添加@Transactional注解
这种方式问题是,我们需要在方法上添加注解,这样处理起来特别麻烦。
我们可以使用XML方式配置,配置好后,方法不需要加注解,这样我们使用起来就不需要再管注解的事情。
1.添加transaction.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd"> <tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="query*" propagation="SUPPORTS" read-only="true"></tx:method>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"></tx:method>
<tx:method name="select*" propagation="SUPPORTS" read-only="true"></tx:method>
<tx:method name="*" propagation="REQUIRED" rollback-for="Exception"></tx:method>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="allManagerMethod"
expression="execution (* com.neo.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod" order="0"/>
</aop:config> <tx:annotation-driven transaction-manager="transactionManager" />
</beans>
这样我们只需只要在编写事务代码的时候遵循上面的规则,编写方法名称,就可以对事务进行拦截。
2.在启动类上引入此配置文件。
@SpringBootApplication
@ImportResource("classpath:transaction.xml")
@MapperScan({"com.neo.dao"})
public class DemoApplication {
这样springboot 就可以支持事务管理了。
3.测试事务是否生效
public void create(SaleOrder order){
orderDao.create(order);
throw new RuntimeException("出错了") ;
}
编写代码如下,在添加后抛出异常,发现数据并没有真正的插入。
注意事项:
使用事务需要引入:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
打印事务日志:
logging:
level:
com.neo.dao: debug
org.springframework.jdbc: debug
日志执行情况:
2018-10-16 23:17:17.702 DEBUG 9640 --- [nio-8000-exec-1] o.s.j.d.DataSourceTransactionManager : Creating new transaction with name [com.neo.service.SaleOrderService.create]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception
2018-10-16 23:17:17.708 DEBUG 9640 --- [nio-8000-exec-1] o.s.j.d.DataSourceTransactionManager : Acquired Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@7f9c9817] for JDBC transaction
2018-10-16 23:17:17.713 DEBUG 9640 --- [nio-8000-exec-1] o.s.j.d.DataSourceTransactionManager : Switching JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@7f9c9817] to manual commit
2018-10-16 23:17:17.754 DEBUG 9640 --- [nio-8000-exec-1] com.neo.dao.SaleOrderDao.create : ==> Preparing: INSERT INTO SALE_ORDER (ID_,NAME_,TOTAL_,CREATOR_,CREATE_TIME_) VALUES (?, ?, ?, ?, ?)
2018-10-16 23:17:17.782 DEBUG 9640 --- [nio-8000-exec-1] com.neo.dao.SaleOrderDao.create : ==> Parameters: 1539703037695(String), zyg(String), 33.0(Double), AA(String), null
2018-10-16 23:17:17.784 DEBUG 9640 --- [nio-8000-exec-1] com.neo.dao.SaleOrderDao.create : <== Updates: 1
2018-10-16 23:17:17.785 DEBUG 9640 --- [nio-8000-exec-1] o.s.j.d.DataSourceTransactionManager : Initiating transaction rollback
2018-10-16 23:17:17.785 DEBUG 9640 --- [nio-8000-exec-1] o.s.j.d.DataSourceTransactionManager : Rolling back JDBC transaction on Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@7f9c9817]
2018-10-16 23:17:17.786 DEBUG 9640 --- [nio-8000-exec-1] o.s.j.d.DataSourceTransactionManager : Releasing JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@7f9c9817] after transaction
2018-10-16 23:17:17.787 DEBUG 9640 --- [nio-8000-exec-1] o.s.jdbc.datasource.DataSourceUtils : Returning JDBC Connection to DataSource
2018-10-16 23:17:17.797 ERROR 9640 --- [nio-8000-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/demo] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: 出错了] with root cause
springboot xml声明式事务管理方案的更多相关文章
- Spring 声明式事务管理方式
声明式事务管理,基于AOP对目标代理,添加环绕通知,比编码方案优势,不具有侵入式,不需要修改原来的代码. 1.基于XML配置的声明式事务管理方案(案例) 接口Service public i ...
- XML方式实现Spring声明式事务管理
1.首先编写一个实体类 public class Dept { private int deptId; private String deptName; public int getDeptId() ...
- spring声明式事务管理方式( 基于tx和aop名字空间的xml配置+@Transactional注解)
1. 声明式事务管理分类 声明式事务管理也有两种常用的方式, 一种是基于tx和aop名字空间的xml配置文件,另一种就是基于@Transactional注解. 显然基于注解的方式更简单易用,更清爽. ...
- Spring声明式事务管理(基于XML方式实现)
--------------------siwuxie095 Spring 声明式事务管理(基于 XML 方式实现) 以转账为例 ...
- 【Spring】Spring的事务管理 - 2、声明式事务管理(实现基于XML、Annotation的方式。)
声明式事务管理 文章目录 声明式事务管理 基于XML方式的声明式事务 基于Annotation方式的声明式事务 简单记录 - 简单记录-Java EE企业级应用开发教程(Spring+Spring M ...
- 零基础学习java------39---------json格式交互,Restful(不懂),静态资源映射,SSM整合(ssm整合思想,application.xml文件详解(声明式事务管理),)
一. json格式交互(知道) 1 . 回顾ajax基本语法 $.ajax({ url:"", // 请求的后台路径 data:{"":"" ...
- Spring—SSJ集成&声明式事务管理
1. 课程介绍 1. SSJ集成;(掌握) 2. 声明式事务管理;(掌握) 什么是三大框架 2.1. ssh Struts/Struts2 Spring Hibernate 2.2. ss ...
- spring声明式事务管理总结
事务配置 首先在/WEB-INF/applicationContext.xml添加以下内容: <!-- 配置事务管理器 --> <bean id="transactionM ...
- Spring声明式事务管理
一.Spring 的声明式事务管理概述 1.Spring 的声明式事务管理在底层是建立在 AOP 的基础之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法 ...
随机推荐
- 微信小程序开发之获取用户手机号码——使用简单php接口demo进行加密数据解密
后边要做一个微信小程序,并要能获取用户微信绑定的手机号码.而小程序开发文档上边提供的获取手机号码的接口(getPhoneNumber())返回的是密文,需要服务器端进行解密,但是官方提供的开发文档一如 ...
- Win10 安装 Anaconda3 用 Anaconda3 安装TensorFlow 1.2 (只支持python3.5)
Win10 安装 Anaconda3 1.安装Anaconda3 选择相应的Anaconda进行安装,下载地址点击这里,下载对应系统版本的Anaconda,官网现在的版本是Anaconda 4.3.1 ...
- Linux 下 mysql的基本配置
Linux 下 mysql的基本配置 2013年02月27日 ⁄ MySQL ⁄ 共 3000字 ⁄ 暂无评论 ⁄ 被围观 2,483 views+ 1. Linux mysql安装: $ yu ...
- HDU 3691 Nubulsa Expo(全局最小割)
Problem DescriptionYou may not hear about Nubulsa, an island country on the Pacific Ocean. Nubulsa i ...
- [Java学习]集合
一. Collection与Map继承结构图 Collection继承结构图 实现Collection接口的类只能存储引用类型!所以set.add(10)会有自动装箱的过程,把int 转成 Integ ...
- python之格式化输出
字符串格式化有两种方式,%和format 先介绍下%号的方法 #%s的语法结构,叫做占位符,就是先占一个位置,然后我们用真实的要显示的数据替换占位符即可#最简单的用法就是下面的方式,其实%s还有其他的 ...
- echarts故障统计多维柱状图 堆叠柱状图 柱状图Demo2
黑底:echarts链接:http://gallery.echartsjs.com/editor.html?c=xnP8JPeu4R option = { backgroundColor: 'blac ...
- JAVA HW2
MODEL //yuec2 Yue Cheng package hw2; import java.io.File; import java.io.FileNotFoundException; impo ...
- Ansible Playbook 详解
一.playbook 的简单使用 1.创建文件实例 (1)编辑配置文件 [root@tiejiangSRC1 ~]# cd /etc/ansible/ [root@tiejiangSRC1 ansib ...
- 10.8H5日记
1.网页中去滚动条的属性 overflow:hidden: overflow-x:hidden:水平超出隐藏 2.z-index 层次叠加 元素重叠 谁的值大谁就在上边 当 当前元素有float和父级 ...