spring事物回滚

xujinpengshh 2009-10-21 11:30:29
xml文件:(部分省略):
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager" ref="txmanager"/>
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="find*,get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="save*,update*,delete*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

<!-- 定义BeanNameAutoProxyCreator-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>IOrderSerivce</value>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</list>
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>

java代码(部分省略):public class OrderSerivce {
public void saveOrder(Orders order){
ShopCart cart=(ShopCart)ActionContext.getContext().getSession().get("cart");
Collection<Product> products=cart.getHashMap().values();
Iterator<Product> it=products.iterator();
while(it.hasNext()){
Product p=it.next();
p.setNumber(p.getNumber()-p.getQuantity());
SpringConnFactory.getProductserivce().update(p);
}
Integer i= orderdao.saveOrder(order);
Iterator<Orderitem> items=order.getOrderitem().iterator();
while(items.hasNext()){
Orderitem item=items.next();
item.setOrderid(i);
SpringConnFactory.getOrderitemserivce().saveOrderitem(item);

}

}
我故意让这句Iterator<Product> it=products.iterator();出错,结果是Integer i= orderdao.saveOrder(order);操作执行了,听说spring只对部分异常回滚事务,那应该怎么让spring对所有的异常回滚,请高手指点
...全文
153 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xycshh 2009-10-23
  • 打赏
  • 举报
回复
换成spring2.0的配置,同时注意在数据库操作中不要用事务的代码,把事物教給spring管理就可以了!
swandragon 2009-10-21
  • 打赏
  • 举报
回复
spring不会对所有的异常进行rollback,通常只对runtimeException等几种有限的异常rollback,对于自定义的异常,若要进行回滚,需在配置文件中申明。就在<props>段中,在PROPAGATION_REQUIRED后加上需要回滚的异常类型即可。
youjianbo_han_87 2009-10-21
  • 打赏
  • 举报
回复
那你配置受事物保护的方法要配对。

所有的DB操作都置于这个受保护的方法中。

zl3450341 2009-10-21
  • 打赏
  • 举报
回复
用HibernateTransactionManager试试看


org.springframework.orm.hibernate3.HibernateTransactionManager
william548934 2009-10-21
  • 打赏
  • 举报
回复
默认情况下,当程序抛出运行期异常(unchecked exception),事务回滚,当程序抛出用户异常(checked exception),事务不会回滚。
xujinpengshh 2009-10-21
  • 打赏
  • 举报
回复
按照网上很多人的做法,自己定义了一个异常,然后抛出,在<prop key="find*,get*">PROPAGATION_REQUIRED,readOnly,-MyException </prop>也定义了,事务就是不回滚
zhao_tk 2009-10-21
  • 打赏
  • 举报
回复
默认好像是运行时异常..会回滚.
v05120s 2009-10-21
  • 打赏
  • 举报
回复
不太懂,帮顶
xujinpengshh 2009-10-21
  • 打赏
  • 举报
回复
是这样吗?<prop key="find*,get*">PROPAGATION_REQUIRED,readOnly,-Exception</prop>
  • 打赏
  • 举报
回复
你把异常catch一下再抛一个runtimeexception就可以了。
xiaozejun 2009-10-21
  • 打赏
  • 举报
回复
spring 默认对根异常是进行回滚的
你可以抛出Exception异常啊

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧