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

基于配置文件的方式

 <context:component-scan base-package="com.learning"/>
 2 
 3     <!-- c3p0连接池配置--><!--注意最好是加上编码的设置,并注意在xml文件中&需要进行转义,通过&amp;进行转义-->
 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&amp;characterEncoding=UTF-8"
 8           p:user="root"
 9           p:password=""/>
10 
11     <!-- 配置jdbcTemplate模板-->
12     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
13           p:dataSource-ref="dataSource"/>
14 
15 
16     <!-- 事务配置 3步,比较固定,注意数据库的引擎,是否支持事务-->
17     <!--MySql默认数据引擎为MyISAM,是不支持事务,需改成InnoDB才能进行事务的操作-->
18     <!-- 1.配置事务,开启spring的事务管理-->
19 
20     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
21           p:dataSource-ref="dataSource"/>
22    
23     <!-- 2.然后配置事务的增强-->
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     <!-- 3.然后配置切面-->
34     <aop:config>
35 
36         <!-- 切入点-->                                  <!--service包下,所有类中的所有方法都设置为切入点-->
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.进行切面配置。
基于注解的方式

<!-- 开启注解扫描-->
 2     <context:component-scan base-package="com.learning"/>
 3 
 4     <!-- c3p0连接池配置-->
 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&amp;characterEncoding=UTF-8"
 9           p:user="root"
10           p:password=""/>
11 
12     <!-- 配置jdbcTemplate模板-->
13     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
14           p:dataSource-ref="dataSource"/> 
17     <!--基于注解的方式,在配置文件中只需两步-->
18 
19     <!-- 1.配置事务,开启spring的事务管理-->
20 
21     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
22           p:dataSource-ref="dataSource"/>
23 
24     <!--2.开启事务注解扫描-->
25     <tx:annotation-driven transaction-manager="transactionManager"/>

注:基于注解的方式,在配置文件中只需两步:1.配置事务管理器(不管是基于配置文件方式或者注解方式,这一步都是必须的);2.开启事务注解扫描;3.在需要进行事务操作的方法上添加注解@Transactional通过以上3个步骤即可完成方式事务的开启,注意不要忘了在所需开启事务的方法上添加注解。
Spring事务配置不起作用可能出现的问题:

1.是否是数据库引擎设置不对造成的【使用的是mysql数据,但是在创建表的时候引擎默认(mysql中引擎默认为MyISAM,是不支持事务操作的),需要修改为InnoDB,就可以支持事务操作了】

2.入口函数必须是public,否则事务不起作用。这一点由Spring的AOP特性决定的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值