Spring中事务配置以及事务不起作用可能出现的问题

前言:在Spring中可以通过对方法进行事务的配置,而不是像原来通过手动写代码的方式实现事务的操作,这在很大程度上减少了开发的难度,本文介绍Spring事务配置的两种方式:基于配置文件的方式和基于注解的方式。并对配置过程中可能出现的问题作出总结。


一、基于配置文件的方式

 1     <context:component-scan base-package="com.learning"/>
 2 
 3     
 4     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
 5           destroy-method="close"
 6           p:driverClass="com.mysql.jdbc.Driver"
 7           p:jdbcUrl="jdbc:mysql://localhost:3306/springlearning?useUnicode=true&characterEncoding=UTF-8"
 8           p:user="root"
 9           p:password=""/>
10 
11     
12     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
13           p:dataSource-ref="dataSource"/>
14 
15 
16     
17     
18     
19 
20     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
21           p:dataSource-ref="dataSource"/>
22    
23     
24     <tx:advice id="txAdvice" transaction-manager="transactionManager">
25         
26         <tx:attributes>
27             
28             <tx:method name="*"/>
29         tx:attributes>
30 
31     tx:advice>
32 
33     
34     <aop:config>
35 
36                                           
37         <aop:pointcut id="servicePointcut" expression="execution(* com.learning.service..*(..))"/>
38 
39         
40         <aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut"/>
41     aop:config>

注:配置文件中,对相应步骤都有详细说明,主要分三步:1.配置事务管理;2.配置事务增强;3.进行切面配置。

二、基于注解的方式

 1     
 2     <context:component-scan base-package="com.learning"/>
 3 
 4     
 5     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
 6           destroy-method="close"
 7           p:driverClass="com.mysql.jdbc.Driver"
 8           p:jdbcUrl="jdbc:mysql://localhost:3306/springlearning?useUnicode=true&characterEncoding=UTF-8"
 9           p:user="root"
10           p:password=""/>
11 
12     
13     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
14           p:dataSource-ref="dataSource"/> 
17     
18 
19     
20 
21     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
22           p:dataSource-ref="dataSource"/>
23 
24     
25     <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日,晚。

转载于:https://www.cnblogs.com/developer_chan/p/8270765.html

你可能感兴趣的:(Spring中事务配置以及事务不起作用可能出现的问题)