<bean id="payHibernateTransProxy" abstract="true" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="hibernateTransManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key = "uploadPayVoucherBillBySmallTrans">PROPAGATION_NOT_SUPPORTED </prop>
<prop key = "uploadPayVoucherBill">PROPAGATION_REQUIRED </prop>
<prop key="*">PROPAGATION_REQUIRED,-Exception </prop>
</props>
</property>、
代码如下:
public String uploadPayVoucherBillBySmallTrans(List list,HeadInfo info,CurrentUser user,boolean isWorkflow){
int sucess = 0;
int failture = 0;
List oneList = null;
setImportPayBillVoucher(list, user, "voucher_bill_id");
for (int i =0,n=list.size();i<n;i++){
oneList = new ArrayList();
oneList.add(list.get(i));
try {
uploadPayVoucherBill(oneList,info,user,isWorkflow);
}catch (Exception e){
e.printStackTrace();
failture ++;
}
}
sucess = list.size() - failture;
return "共上传文件"+list.size()+"条,成功"+sucess+"条";
}
public String uploadPayVoucherBill(List list, HeadInfo info, CurrentUser user, boolean isWorkflow) {
String result = "";
try {
// setImportPayBillVoucher(list, user, "voucher_bill_id");
baseBusiness.doWorkFlow(user, "", list, false, false);
writeExportDate(list, user);
payVoucherBillDAO.batchUpdate(list);
if( true ){
throw new BaseException( "test" );
}
result = exchangeDtoXml.uploadFiles(list, info, user);
} catch (Exception e) {
throw new PlatformException(e.getMessage());
}
return result;
}
uploadPayVoucherBillBySmallTrans会调用uploadPayVoucherBill方法,我希望如果有异常uploadPayVoucherBill方法回滚,而uploadPayVoucherBillBySmallTrans方法不回滚,
而现在是在uploadPayVoucherBillBySmallTrans方法中必须重新抛出异常之后才回滚,不知道配置有什么错误,请大侠指点。
9 个解决方案
#1
savePoint 保存点
一般情况下,事务的完整性要求,要不全部提交,要不全部回滚,不能部分。
所以产生了保存点这个概念和对应的功能。你可以回滚到已经保存的某个保存点。
一般情况下,事务的完整性要求,要不全部提交,要不全部回滚,不能部分。
所以产生了保存点这个概念和对应的功能。你可以回滚到已经保存的某个保存点。
#2
我的意思是uploadPayVoucherBill是一个完整的事务,而uploadPayVoucherBillBySmallTrans是没有事务的,这是我想达到的目的,对于uploadPayVoucherBillBySmallTrans而言,它是完整的。
#3
个人理解:
uploadPayVoucherBillBySmallTrans中调用uploadPayVoucherBill,已经catch异常了,所以应该不会rollback
或者
<prop key = "uploadPayVoucherBillBySmallTrans">PROPAGATION_NOT_SUPPORTED </prop>
<prop key = "uploadPayVoucherBill">PROPAGATION_REQUIRED </prop>
<prop key="*">PROPAGATION_REQUIRED,-Exception </prop>
spring配置中不匹配uploadPayVoucherBillBySmallTrans,应该也不会rollback
uploadPayVoucherBillBySmallTrans中调用uploadPayVoucherBill,已经catch异常了,所以应该不会rollback
或者
<prop key = "uploadPayVoucherBillBySmallTrans">PROPAGATION_NOT_SUPPORTED </prop>
<prop key = "uploadPayVoucherBill">PROPAGATION_REQUIRED </prop>
<prop key="*">PROPAGATION_REQUIRED,-Exception </prop>
spring配置中不匹配uploadPayVoucherBillBySmallTrans,应该也不会rollback
#4
有什么可以解决的方法吗?
#5
<prop key = "uploadPayVoucherBillBySmallTrans">PROPAGATION_NOT_SUPPORTED </prop>
<prop key = "uploadPayVoucherBill">PROPAGATION_REQUIRED </prop>
<prop key="*">PROPAGATION_REQUIRED,-Exception </prop>
删除第一条和第三条试试
#6
受一楼启发,把事务配置成了嵌套事务
<prop key = "uploadPayVoucherBill"> PROPAGATION_NESTED,-Exception</prop>
同时把nestedTransactionAllowed也配置为了true
<bean id="hibernateTransManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="mysessionFactory" />
</property>
<property name="nestedTransactionAllowed" value="true" />
</bean>
不知道为啥还是事务不回滚,大家用过 PROPAGATION_NESTED这种事务的给个意见,谢谢。
<prop key = "uploadPayVoucherBill"> PROPAGATION_NESTED,-Exception</prop>
同时把nestedTransactionAllowed也配置为了true
<bean id="hibernateTransManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="mysessionFactory" />
</property>
<property name="nestedTransactionAllowed" value="true" />
</bean>
不知道为啥还是事务不回滚,大家用过 PROPAGATION_NESTED这种事务的给个意见,谢谢。
#7
有人会不 在线等待 急!
#8
<prop key="*">PROPAGATION_REQUIRED,-Exception </prop>
所有的方法都加事务,性能太差了吧,
我建议你这么配<prop key="do*">PROPAGATION_REQUIRED,-Exception </prop>
所有以do开头的方法有事务,其他的无事务,
另外我支持fosjos
lz在处理事务的时候还是要综合考虑比较好,否则事务都乱套了,我觉得你的需求很常见,一般大家都是像我说的那样配置的,所有方法都带事务这个可不好,以后问题会越来越多.
所有的方法都加事务,性能太差了吧,
我建议你这么配<prop key="do*">PROPAGATION_REQUIRED,-Exception </prop>
所有以do开头的方法有事务,其他的无事务,
另外我支持fosjos
lz在处理事务的时候还是要综合考虑比较好,否则事务都乱套了,我觉得你的需求很常见,一般大家都是像我说的那样配置的,所有方法都带事务这个可不好,以后问题会越来越多.
#9
问题解决了,因为在我配置的是同一个事务中的两个方法的,这样不会起另一个事务,查看了spring的源代码。
#1
savePoint 保存点
一般情况下,事务的完整性要求,要不全部提交,要不全部回滚,不能部分。
所以产生了保存点这个概念和对应的功能。你可以回滚到已经保存的某个保存点。
一般情况下,事务的完整性要求,要不全部提交,要不全部回滚,不能部分。
所以产生了保存点这个概念和对应的功能。你可以回滚到已经保存的某个保存点。
#2
我的意思是uploadPayVoucherBill是一个完整的事务,而uploadPayVoucherBillBySmallTrans是没有事务的,这是我想达到的目的,对于uploadPayVoucherBillBySmallTrans而言,它是完整的。
#3
个人理解:
uploadPayVoucherBillBySmallTrans中调用uploadPayVoucherBill,已经catch异常了,所以应该不会rollback
或者
<prop key = "uploadPayVoucherBillBySmallTrans">PROPAGATION_NOT_SUPPORTED </prop>
<prop key = "uploadPayVoucherBill">PROPAGATION_REQUIRED </prop>
<prop key="*">PROPAGATION_REQUIRED,-Exception </prop>
spring配置中不匹配uploadPayVoucherBillBySmallTrans,应该也不会rollback
uploadPayVoucherBillBySmallTrans中调用uploadPayVoucherBill,已经catch异常了,所以应该不会rollback
或者
<prop key = "uploadPayVoucherBillBySmallTrans">PROPAGATION_NOT_SUPPORTED </prop>
<prop key = "uploadPayVoucherBill">PROPAGATION_REQUIRED </prop>
<prop key="*">PROPAGATION_REQUIRED,-Exception </prop>
spring配置中不匹配uploadPayVoucherBillBySmallTrans,应该也不会rollback
#4
有什么可以解决的方法吗?
#5
<prop key = "uploadPayVoucherBillBySmallTrans">PROPAGATION_NOT_SUPPORTED </prop>
<prop key = "uploadPayVoucherBill">PROPAGATION_REQUIRED </prop>
<prop key="*">PROPAGATION_REQUIRED,-Exception </prop>
删除第一条和第三条试试
#6
受一楼启发,把事务配置成了嵌套事务
<prop key = "uploadPayVoucherBill"> PROPAGATION_NESTED,-Exception</prop>
同时把nestedTransactionAllowed也配置为了true
<bean id="hibernateTransManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="mysessionFactory" />
</property>
<property name="nestedTransactionAllowed" value="true" />
</bean>
不知道为啥还是事务不回滚,大家用过 PROPAGATION_NESTED这种事务的给个意见,谢谢。
<prop key = "uploadPayVoucherBill"> PROPAGATION_NESTED,-Exception</prop>
同时把nestedTransactionAllowed也配置为了true
<bean id="hibernateTransManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="mysessionFactory" />
</property>
<property name="nestedTransactionAllowed" value="true" />
</bean>
不知道为啥还是事务不回滚,大家用过 PROPAGATION_NESTED这种事务的给个意见,谢谢。
#7
有人会不 在线等待 急!
#8
<prop key="*">PROPAGATION_REQUIRED,-Exception </prop>
所有的方法都加事务,性能太差了吧,
我建议你这么配<prop key="do*">PROPAGATION_REQUIRED,-Exception </prop>
所有以do开头的方法有事务,其他的无事务,
另外我支持fosjos
lz在处理事务的时候还是要综合考虑比较好,否则事务都乱套了,我觉得你的需求很常见,一般大家都是像我说的那样配置的,所有方法都带事务这个可不好,以后问题会越来越多.
所有的方法都加事务,性能太差了吧,
我建议你这么配<prop key="do*">PROPAGATION_REQUIRED,-Exception </prop>
所有以do开头的方法有事务,其他的无事务,
另外我支持fosjos
lz在处理事务的时候还是要综合考虑比较好,否则事务都乱套了,我觉得你的需求很常见,一般大家都是像我说的那样配置的,所有方法都带事务这个可不好,以后问题会越来越多.
#9
问题解决了,因为在我配置的是同一个事务中的两个方法的,这样不会起另一个事务,查看了spring的源代码。