spring 事务控制
2016-04-14 16:36
411 查看
一、Spring中事务的配置(applicationContext.xml)
<!-- 事务配置 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"ref="sessionFactory"/>
</bean>
<!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
二、在service加try 导致事务不回滚 【注明:一般service不要加 try】
public class UserServiceImpl{
public void saveUser(){
try {
User user=new User();
User.setName(“张三”);
int a=1/0; //出异常,不会回滚,数据保存到数据库
}catch(Exception e){
e.printStackTrace();
//throw new RuntimeException()
}
}
三、解决方案
方法1:
在service不加try,
方法2:
在catch语句中最后增加throw new RuntimeException()语句
方法3:
在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚
四、总结
默认spring事务只在发生未被捕获的 runtimeexcetpion时才回滚。
换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚
顶
<!-- 事务配置 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"ref="sessionFactory"/>
</bean>
<!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
二、在service加try 导致事务不回滚 【注明:一般service不要加 try】
public class UserServiceImpl{
public void saveUser(){
try {
User user=new User();
User.setName(“张三”);
int a=1/0; //出异常,不会回滚,数据保存到数据库
}catch(Exception e){
e.printStackTrace();
//throw new RuntimeException()
}
}
三、解决方案
方法1:
在service不加try,
方法2:
在catch语句中最后增加throw new RuntimeException()语句
方法3:
在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚
四、总结
默认spring事务只在发生未被捕获的 runtimeexcetpion时才回滚。
换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚
顶
相关文章推荐
- Springmvc注解启用
- Java内部类:概览(一)
- Java transient关键字
- Java并发编程系列之三十二:丢失的信号
- 【学习】Spring 的 AOP :基于Annotation 的“零配置”方式
- ANT 、Junit、JunitReport、Spring、MyBatis
- spring ico
- Spring中拦截/和拦截/*的区别 - 不能访问到返回的JSP - 访问静态资源(jpg,js等)
- 使用 Spring Data JPA 简化 JPA 开发
- 如何在spring中获取request对象
- Eclipse导出Library
- java反射机制
- Java接口
- 【Java】Socket入门 [一]
- JAVA实现链表
- Spring声明式事务
- 20145314郑凯杰 《Java程序设计》实验二 实验报告
- java中的三种取整函数
- java中finally关键字
- springMVC 配置