public
interface
Bar
{
2 public void foo();
3 public void saveToDB();
4 }
2 public void foo();
3 public void saveToDB();
4 }
1
public
BarImpl
implements
Bar
{
2 public void foo() {
3 saveToDB();
4
5 if () {
6 throw new RuntimeException();
7 }
8 .
9 }
10
11 public void saveToDB() {
12 // 数据库存储操作
13 .
14 }
15 }
2 public void foo() {
3 saveToDB();
4
5 if () {
6 throw new RuntimeException();
7 }
8 .
9 }
10
11 public void saveToDB() {
12 // 数据库存储操作
13 .
14 }
15 }
如果foo方法结束前抛出异常,则saveToDB方法中所作的数据库修改也无效了 我的目的是:不管foo是否抛出异常,如果saveToDB成功执行后,则数据库也要有相应的修改 请问应该怎么配置啊?
我的配置:
1
<
bean id
=
"
transactionInterceptor
"
class
=
"
org.springframework.transaction.interceptor.TransactionInterceptor
"
>
2 < property name = " transactionManager " ref = " transactionManager " />
3 < property name = " transactionAttributes " >
4 < props >
5 < prop key = " save* " > PROPAGATION_REQUIRED </ prop >
6 < prop key = " foo* " > PROPAGATION_REQUIRED </ prop >
7 </ props >
8 </ property >
9 </ bean >
2 < property name = " transactionManager " ref = " transactionManager " />
3 < property name = " transactionAttributes " >
4 < props >
5 < prop key = " save* " > PROPAGATION_REQUIRED </ prop >
6 < prop key = " foo* " > PROPAGATION_REQUIRED </ prop >
7 </ props >
8 </ property >
9 </ bean >
-------------------------------------------------------------------------------------------------------------------
默认的情况下,spring只有当unchecked exception被抛出时,才rollback事务。
1
<
property name
=
"
transactionAttributes
"
>
2 < props >
3 < prop key = " insert* " > PROPAGATION_REQUIRED, - MyCheckedException, + MyUnCheckedException </ prop >
4 < prop key = " update* " > PROPAGATION_REQUIRED </ prop >
5 < prop key = " * " > PROPAGATION_REQUIRED,readOnly </ prop >
6 </ props >
7 </ property >
8
2 < props >
3 < prop key = " insert* " > PROPAGATION_REQUIRED, - MyCheckedException, + MyUnCheckedException </ prop >
4 < prop key = " update* " > PROPAGATION_REQUIRED </ prop >
5 < prop key = " * " > PROPAGATION_REQUIRED,readOnly </ prop >
6 </ props >
7 </ property >
8
-MyCheckedException 指定如果方法抛出MyCheckedException或它的子类,事务将 会自动回滚。
+MyUnCheckedException 指定如果方法抛出MyUnCheckedException或它的子类,事务仍将会提交。