spring+mybatis使用事务管理不生效原因分析
2016-03-24 19:50
393 查看
spring+mybatis使用事务管理不生效原因
检查spring的配置信息是否配置正确<!-- 配置事务的通知:(事务的增强) --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- propagation :事务的传播行为 isolation :事务的隔离级别 read-only :只读 rollback-for:发生哪些异常回滚 no-rollback-for:发生哪些异常不回滚 timeout :过期信息 --> <tx:method name="transfer" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <!-- 配置切面 --> <aop:config> <!-- 配置切入点 --> <aop:pointcut id="pointcut" expression="execution(* com.xinrui.hospital.service.*.*(..))" /> <!-- 配置切面 --> <aop:advisor pointcut-ref="pointcut" advice-ref="txAdvice" /> </aop:config>
其中最容易出错的点是
expression=”execution(* com.xinrui.hospital.service..(..))”的写法,上述写法是正确的写法。
2.其次是在service层对于要管理的方法不要使用try-catch来捕获异常信息
package com.xinrui.hospital.service.impl; import javax.annotation.Resource; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service; import com.xinrui.hospital.bean.Account; import com.xinrui.hospital.dao.IAccountDao; import com.xinrui.hospital.service.IAccountService; /** * * @ClassName: AccountServiceImpl * @Description: 转账服务实现类 * @author 梁志成 * @date 2016年3月22日 下午5:26:36 * */ @Service(value = "accountService") public class AccountServiceImpl implements IAccountService { @Resource(name = "accountDao") private IAccountDao accountDao; /** * * @Title: transfer * @Description: 转账 * @param @param out 转出账号 * @param @param in 转入账号 * @param @param money 转账金额 * @return void */ public boolean transfer(String out, String in, Double money) { if (StringUtils.isNotEmpty(out) && StringUtils.isNotEmpty(in)) { Account outAccount = new Account(); outAccount.setMoney(money); outAccount.setName(out); accountDao.outMoney(outAccount); int i = 1 / 0; Account inAccount = new Account(); inAccount.setMoney(money); inAccount.setName(in); accountDao.inMoney(inAccount); } return false; } }
上述是正确的配置。
3.确保事务交由spring管理
<!-- 配置由spring扫描的注解 --> <context:component-scan base-package="com.xinrui.hospital" use-default-filters="true"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan>
<!-- 配置由Spring-mvc扫描的注解 --> <context:component-scan base-package="com.xinrui.hospital.action" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan>
上述是正确的配置。
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- asp内置对象 ObjectContext 事务管理 详解
- 模拟Spring的简单实现
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- 深入浅析mybatis oracle BLOB类型字段保存与读取
- MyBatis MapperProvider MessageFormat拼接批量SQL语句执行报错的原因分析及解决办法
- SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
- struts2 spring整合fieldError问题
- spring的jdbctemplate的crud的基类dao
- 读取spring配置文件的方法(spring读取资源文件)
- Spring Bean基本管理实例详解
- java实现简单美女拼图游戏
- 详解Java的Spring框架中的事务管理方式
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- MyBatis学习笔记(二)之关联关系