Я пытаюсь использовать декларативную транзакцию вокруг метода в моем приложении, который вызывает несколько запросов к базе данных. Я сделал это путем применения @Transactional аннотацию к методу в вопросе, который выглядит что-то похожее на это:Spring - Транзакция не применяется вокруг метода
@Transactional
public MyReturnType myTransactionalMethod(SomeType1 param) {
SomeType2 someIntermediateObject = dao1.doStuff(param);
MyReturnType retObj = dao2.doMoreStuff(someIntermediateObject);
return retObj;
}
Я тогда установить пружинные транзакции в моем XML конфигурации:
<tx:annotation-driven transaction-manager="transactionManager" order="200"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/>
Я тогда хотел чтобы проверить этот метод, чтобы проверить, что сделки будут правильно откатить на провал в методе, так что я изменил мой метод, чтобы выглядеть примерно так:
public MyReturnType myTransactionalMethod(SomeType1 param) {
SomeType2 someIntermediateObject = dao1.doStuff(param);
MyReturnType retObj = dao2.doMoreStuff(someIntermediateObject);
throw new RuntimeException(); //The RuntimeException should trigger a rollback
}
Когда я execut этот второй метод, он не сделал отката, как я ожидал бы, а скорее оставил созданные записи в моей базе данных. Я также ожидал увидеть в стеке трассировку какой-то признак весеннего аспекта, связанный с моим вставленным методом, который будет обрабатывать транзакционные материалы, но я вижу только метод вызова непосредственно перед этим транзакционным методом, без признаков каких-либо методов с использованием Spring ,
Может ли кто-нибудь увидеть что-нибудь, что я делаю неправильно, что приведет к такому поведению, когда обработка транзакций не будет применена?
Показать, где вы звоните 'myTransactionalMethod'. – chrylis