Spring中事务配置以及事务不起作用可能出现的问题
前言:在Spring中可以通过对方法进行事务的配置,而不是像原来通过手动写代码的方式实现事务的操作,这在很大程度上减少了开发的难度,本文介绍Spring事务配置的两种方式:基于配置文件的方式和基于注解的方式。并对配置过程中可能出现的问题作出总结。
一、基于配置文件的方式
<context:component-scan base-package="com.learning"/>
<!-- c3p0连接池配置--><!--注意最好是加上编码的设置,并注意在xml文件中&需要进行转义,通过&进行转义-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close"
p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://localhost:3306/springlearning?useUnicode=true&characterEncoding=UTF-8"
p:user="root"
p:password=""/>
<!-- 配置jdbcTemplate模板-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref="dataSource"/>
<!-- 事务配置 3步,比较固定,注意数据库的引擎,是否支持事务-->
<!--MySql默认数据引擎为MyISAM,是不支持事务,需改成InnoDB才能进行事务的操作-->
<!-- 1.配置事务,开启spring的事务管理-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/>
<!-- 2.然后配置事务的增强-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 做事务操作-->
<tx:attributes>
<!-- 设置进行事务操作的方法匹配规则,就是对什么方法进行事务操作,这里可以直接写方法名,也可以直接写*,表示对所有方法开启事务支持-->
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- 3.然后配置切面-->
<aop:config>
<!-- 切入点--> <!--service包下,所有类中的所有方法都设置为切入点-->
<aop:pointcut id="servicePointcut" expression="execution(* com.learning.service..*(..))"/>
<!-- 切面-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut"/>
</aop:config>
注:配置文件中,对相应步骤都有详细说明,主要分三步:1.配置事务管理;2.配置事务增强;3.进行切面配置。
二、基于注解的方式
<!-- 开启注解扫描-->
<context:component-scan base-package="com.learning"/> <!-- c3p0连接池配置-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close"
p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://localhost:3306/springlearning?useUnicode=true&characterEncoding=UTF-8"
p:user="root"
p:password=""/> <!-- 配置jdbcTemplate模板-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref="dataSource"/>
<!--基于注解的方式,在配置文件中只需两步--> <!-- 1.配置事务,开启spring的事务管理--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/> <!--2.开启事务注解扫描-->
<tx:annotation-driven transaction-manager="transactionManager"/>
注:基于注解的方式,在配置文件中只需两步:1.配置事务管理器(不管是基于配置文件方式或者注解方式,这一步都是必须的);2.开启事务注解扫描;3.在需要进行事务操作的方法上添加注解@Transactional通过以上3个步骤即可完成方式事务的开启,注意不要忘了在所需开启事务的方法上添加注解。
Spring事务配置不起作用可能出现的问题:
1.是否是数据库引擎设置不对造成的【笔者就遇到了这个问题,由于笔者使用的是mysql数据,但是在创建表的时候引擎默认(mysql中引擎默认为MyISAM,是不支持事务操作的),需要修改为InnoDB,就可以支持事务操作了】
2.入口函数必须是public,否则事务不起作用。这一点由Spring的AOP特性决定的。
这就是笔者在配置事务过程中所遇到的问题,如再遇任何问题,则继续补充。
by Shawn Chen,2018.1.11日,晚。
Spring中事务配置以及事务不起作用可能出现的问题的更多相关文章
- 0045 Spring中使用DataSourceTransactionManager进行事务管理的xml配置
在一个业务的实现过程中,可能需要多条sql完成对数据库的操作,比如账户登录,需要匹配用户名和密码,然后要增加积分,还要记录登录的ip和时间,这可能需要三个sql语句,这三个语句应当是一个整体,任意一个 ...
- Spring中如何配置事务
学过SSH的都知道,整合了SSH之后,SSH的经典增删改查案例业务逻辑层的代码就十分简单.基本上都是一句话的事. public void addUser(Webuserlogin user) { // ...
- Spring中使用DataSourceTransactionManager进行事务管理的xml配置
在一个业务的实现过程中,可能需要多条sql完成对数据库的操作,比如账户登录,需要匹配用户名和密码,然后要增加积分,还要记录登录的ip和时间,这可能需要三个sql语句,这三个语句应当是一个整体,任意一个 ...
- Spring中实现多数据源事务管理
文章转自 https://www.2cto.com/kf/201507/424229.html 前言 由于项目中引入了多个数据源,并且需要对多个数据源进行写操作,那么多数据源的事务管理自然成了不可避 ...
- Spring中的@Transactional以及事务的详细介绍
首先来说下事务,说到事务就不得不说它的四个特性(acid): 一.特性 1.原子性(atomicity):一个事务当作为一个不可分割的最小工作单元,一组操作要么全部成功,要么全部失败. 2.一致性(c ...
- 解决在Spring整合Hibernate配置tx事务管理器出现错误的问题
问题描述: Error occured processing XML 'org/aopalliance/intercept/MethodInterceptor'. See Error Log for ...
- Velocity初探小结--Velocity在spring中的配置和使用
最近正在做的项目前端使用了Velocity进行View层的数据渲染,之前没有接触过,草草过了一遍,就上手开始写,现在又回头细致的看了一遍,做个笔记. velocity是一种基于java的模板引擎技术, ...
- C3P0连接池在hibernate和spring中的配置
首先为什么要使用连接池及为什么要选择C3P0连接池,这里就不多说了,目前C3P0连接池还是比较方便.比较稳定的连接池,能与spring.hibernate等开源框架进行整合. 一.hibernate中 ...
- Spring 中属性配置
1 注册自定义属性编辑器,方法一.使用BeanFactory, 则用户需要手动调用 registerCustomEditor(Class requiredType, PropertyEditor pr ...
随机推荐
- oracle listener.ora文件配置
# listener.ora Network Configuration File: /oracleDB/product//db_1/network/admin/listener.ora # Gene ...
- js节点的类型
1. dom>documentElement>body>tagname 2.我们常用的节点标签. 元素节点(标签) 文本节点 属性节点(标签里的属性) 3.document有个属性n ...
- Redis配置解读
- JAX-WS Web Service小试牛刀
1.使用Eclipse新建Java工程JavaDemo 2.新建包com.kira.ws 3.在包com.kira.ws新建类Hello,代码如下 package com.kira.ws; impor ...
- Vue 2.5 发布了:15篇前端热文回看
Vue 2.5 发布了:15篇前端热文回看 2017-11-02 前端大全 (点击上方公众号,可快速关注) 本文精选了「前端大全」2017 年 10 月的 15 篇热门文章.其中有职场分享.技术分享和 ...
- js正整数正则表达式
function testNumber(){ var yourinputValue=$("#yourinputId").val(); var reg = /^[1-9]\d*$/; ...
- jQuery与JS中的map()方法使用
1.jquery中的map()方法 首先看一个简单的实例: $("p").append( $("input").map(function(){ return $ ...
- 《JavaScript高级程序设计》笔记:变量、作用域和内存问题(四)
基本类型和引用类型的值 ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型的值指那些可能有多个值构成的对象. 动态的属性 var p ...
- CSS3效果:5种预载动画效果
实现如图所示的动画效果: 预载动画一:双旋圈 在两个不同方向旋转的圆圈.我们对内圈的转速定义了一个CSS代码,即内圈比外圈的速率快2倍.实现如图所示: html代码: <body style=& ...
- 一次断电引发的svn数据库故障
作者:朱金灿 来源:http://blog.csdn.net/clever101 昨天办公室停电了.然后今天更新svn数据库时出现一个不能读取文件:End of file found的错误,具体如下图 ...