Тестовый пакет Spring с @JpaDataTest - PullRequest
0 голосов
/ 04 марта 2019

Я использую весеннюю партию 4.0 и пытаюсь проверить свою партию.Я бы использовал встроенную базу данных h2 с @JpaDataTest, но она не работает.Когда я добавляю эту аннотацию, я получаю сообщение об ошибке

java.lang.IllegalStateException: в JobRepository обнаружена существующая транзакция.Пожалуйста, исправьте это и попробуйте снова (например, удалите аннотации @Transactional из клиента).

@ Транзакция (распространение = распространение. NEW_REQUIRED) на @Test не работает.

Iпытался скопировать все аннотации из @JpaDataTest и удалить @ Transaction

@BootstrapWith(SpringBootTestContextBootstrapper.class)
@OverrideAutoConfiguration(enabled = false)
@AutoConfigureCache
@AutoConfigureDataJpa
@AutoConfigureTestDatabase
@AutoConfigureTestEntityManager
@ImportAutoConfiguration

Но когда я делаю это, я теряю EntityManager ...

Кто-то уже нашел решение?

1 Ответ

0 голосов
/ 05 марта 2019

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 справочной документации.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...