По умолчанию Spring Framework может выполнить откат, если исключение исключено через границу транзакционного метода.Но в случае распространения транзакции, я хочу откатить транзакцию только в том случае, если исключение не обработано внешним методом (где запускается передача).Можно ли настроить Spring таким образом?
@Transactional
public class OutterA {
@Autowired
private Inner inner;
public void operationA1() {
this.doSomething();
inner.doSomething();
}
public void operationA2() {
this.doSomething();
try {
inner.doSomething();
} catch (Exception e) {
inner.tryAnother();
}
}
public void doSomething() {
}
}
@Transactional
public class Inner {
public void doSomething() {
throw new RuntimeException();
}
public void tryAnother() {
}
}
В приведенном выше коде я ожидаю, что операция A1 будет откатана, потому что исключение не перехватывается и вызывает завершение транзакции, в то время как операция A 2 завершается успешно, потому что это исключениепойман и правильно обработан до завершения транзакции.Но Spring откатит оба.
// Non-transactional
public class OutterB {
@Autowired
private Inner inner;
public void operationB() {
try {
inner.doSomething();
} catch (Exception ignore) {
}
}
}
В приведенном выше коде я ожидаю, что операция B всегда будет откатываться, потому что транзакция запускается Inner
и исключение выбрасывается через границу транзакции.