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 ...
随机推荐
- 【WebSocket No.3】使用WebSocket协议来做服务器
写在开始 上面一篇写了一篇使用WebSocket做客户端,然后服务端是socke代码实现的.传送门:webSocket和Socket实现聊天群发 本来我是打算写到一章上的,毕竟实现的都是一样的功能,后 ...
- String为什么是不可变的?
前几天一个面试被问到String为什么是不可变的?, 自我感觉当时回答的不太理想, 事后总结一下 不可变的是什么 我们谈论的String不可变, 指的是字符串的值不可变 例: String s = & ...
- Flask 系列之 Pagination
说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 实现当前登录用户的事务浏览.添加.删除 操作 实现 首先 ...
- git入门 创建版本库, 版本管理 分支 标签
参考: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 GIT最流行的分布式版本 ...
- 现在有两个变量,分别是a = 3, b = 4,那么我们不用第三个变量来调换a和b的值。
现在有两个变量,分别是a = 3, b = 4,那么我们不用第三个变量来调换a和b的值. <!DOCTYPE html><html><head> <me ...
- canvas-7globleCompositeOperation.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 如何用ABP框架快速完成项目(14) - 结尾? 当然不是, 这只是开始!
此文当前版本号: 3 最近更新时间: 2018-12-9 04:52 本课程是方向性课程, 目的是避免南辕北辙. 方向盘一旦打正确, 还得需要以下文章去写好具体程序: 前面每篇文章里面的链接, 比 ...
- 关于数据分析的4点心得:维度、指标、KPI
1.看数据看维度 在对某一项业务或者业务的某个模块进行分析时,可以从大小两个角度去切入分析. 首先站在广阔的视角去看待一些数据.比如对某个产品(消费品),就要分析在大环境下是一个什么样的数据,如市场排 ...
- 智能POS相关FAQ
1.安卓智能POS(一体机)的口碑点餐已知问题: 1.由于口碑的组合套餐接口不稳定,强烈建议商户不要使用组合套餐商品.已开通口碑后付的门店,如果有组合套餐商品,暂时不要使用组合套餐商品:有组合套餐需求 ...
- distribution 分发数据库 灾难恢复 备份恢复
参考: http://www.sqlservercentral.com/articles/Replication/117265/ 前提: 准备一台电脑,主机名和以前的分发数据库一致.并且安装s ...