ТранзакцияTemplate.executeWithoutResult не выдает ошибку, если транзакция не удалась ⇐ JAVA
-
Anonymous
ТранзакцияTemplate.executeWithoutResult не выдает ошибку, если транзакция не удалась
Я использую Spring-tx с базой данных PostgreSQL. В приведенном ниже фрагменте теста исключение SQL возникает внутри транзакции («TX: вторая вставка») и поглощается кодом.
Если исключение было перехвачено в коде Java, может ли вызывающая сторона transactionTemplate.executeWithoutResult получить обратную связь, указывающую, когда транзакция завершилась неудачей и был откачен?
void testSwallowingNonSerializationException() { TransactionTemplate transactionTemplate = новый TransactionTemplate (менеджер); транзакцияTemplate.executeWithoutResult( (т) -> { log.info("TX: первая вставка"); dslContext.insertInto(Author.AUTHOR).values(100, «повезло», «вы»).execute(); log.info("TX: первая вставка выполнена"); пытаться { log.info("TX: Вторая вставка"); dslContext.insertInto(Author.AUTHOR).values(100, «повезло», «вы»).execute(); log.info("TX: Вторая вставка выполнена"); } catch (Исключение е) { log.error("TX: вторая вставка не удалась", e); log.info("TX: исключение проглатывания {}", e.getMessage()); } }); // Примечание: из метода транзакции() не создается никаких исключений.. Утверждения.assertThrows( java.util.NoSuchElementException.класс, () -> { вал автор = dslContext .selectFrom(Автор.АВТОР) .where(Автор.AUTHOR.ID.eq(100)) .fetchOptional() .orElseThrow() .into(Автор.класс); System.out.println(автор); }); }
Я использую Spring-tx с базой данных PostgreSQL. В приведенном ниже фрагменте теста исключение SQL возникает внутри транзакции («TX: вторая вставка») и поглощается кодом.
Если исключение было перехвачено в коде Java, может ли вызывающая сторона transactionTemplate.executeWithoutResult получить обратную связь, указывающую, когда транзакция завершилась неудачей и был откачен?
void testSwallowingNonSerializationException() { TransactionTemplate transactionTemplate = новый TransactionTemplate (менеджер); транзакцияTemplate.executeWithoutResult( (т) -> { log.info("TX: первая вставка"); dslContext.insertInto(Author.AUTHOR).values(100, «повезло», «вы»).execute(); log.info("TX: первая вставка выполнена"); пытаться { log.info("TX: Вторая вставка"); dslContext.insertInto(Author.AUTHOR).values(100, «повезло», «вы»).execute(); log.info("TX: Вторая вставка выполнена"); } catch (Исключение е) { log.error("TX: вторая вставка не удалась", e); log.info("TX: исключение проглатывания {}", e.getMessage()); } }); // Примечание: из метода транзакции() не создается никаких исключений.. Утверждения.assertThrows( java.util.NoSuchElementException.класс, () -> { вал автор = dslContext .selectFrom(Автор.АВТОР) .where(Автор.AUTHOR.ID.eq(100)) .fetchOptional() .orElseThrow() .into(Автор.класс); System.out.println(автор); }); }
Мобильная версия