public interface Bar {
2
public void foo();
3
public void saveToDB();
4
}
2

3

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

3

4


5


6

7

8


9

10

11

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

3

4

5

6

7

8

9

-------------------------------------------------------------------------------------------------------------------
默认的情况下,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

3

4

5

6

7

8

-MyCheckedException 指定如果方法抛出MyCheckedException或它的子类,事务将 会自动回滚。
+MyUnCheckedException 指定如果方法抛出MyUnCheckedException或它的子类,事务仍将会提交。