java.lang.IllegalStateException: в JobRepository обнаружена существующая транзакция.Исправьте это и повторите попытку (например, удалите аннотации @Transactional из клиента).
Эта ошибка возникает при попытке запустить код Spring Batch (который управляет транзакцией) во внешнем транзакционном контексте (теств вашем примере).
Вместо добавления @Transaction(propagation=Propagation.NEW_REQUIRED)
в тест, вместо этого вы должны попытаться деактивировать транзакции, позволяя Spring Batch управлять транзакцией.Например, используя:
@Transaction(propagation = Propagation.NOT_SUPPORTED)
Я пытался скопировать все аннотации из @JpaDataTest и удалить @Transaction [...] Но когда я это делаю, я теряю EntityManager...
Вам необходимо убедиться, что Spring Batch использует менеджер транзакций, который вы хотите (я полагаю, JpaTransactionManager
в вашем случае) для управления своими транзакциями.Для этого вам необходимо определить bean-компонент типа BatchConfigurer
в вашей пакетной конфигурации и переопределить getTransactionManager
.Вот пример:
@Bean
public BatchConfigurer batchConfigurer() {
return new DefaultBatchConfigurer() {
@Override
public PlatformTransactionManager getTransactionManager() {
return new MyTransactionManager();
}
};
}
Более подробную информацию можно найти в разделе Java Configuration справочной документации.
Надеюсь, это поможет.