Изменение EntityManager для одной транзакции - PullRequest
0 голосов
/ 15 октября 2019

При использовании данных пружины мы автоматически подключаем EntityManager и меняем его режим промывки на COMMIT (вместо использования по умолчанию AUTO) в наших @Scheduled и @Transactional методах. Есть ли у нас гарантия, что изменение EntityManager сбрасывающего режима в этом методе (или в общих свойствах EntityManager) не будет протекать вне метода @Scheduled (я имею в виду автоматическое подключение его в другом классе где-то за пределами @Scheduled)? Что если тот же поток, используемый @Scheduled, будет повторно использован в другом месте? Является ли EntityManager ограниченным потоком или чем-то еще, или это все время другой экземпляр?

Мы попытались немного проанализировать его и распечатали текущий поток, менеджер сущностей и значения режима сброса внаш планировщик вот так:

@Scheduled(cron = OUR_CRON)
@Transactional
public void run() {
    log.info(entityManager);
    log.info(entityManager.getFlushMode().name());
    entityManager.setFlushMode(FlushModeType.COMMIT);
}

и результаты были такими:

2019-10-15 10:27:00.117  INFO 16461 --- [pool-5-thread-1]     : Shared EntityManager proxy for target factory [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@ba1a239]
2019-10-15 10:27:00.117  INFO 16461 --- [pool-5-thread-1]     : AUTO
// --- next call of scheduler
2019-10-15 10:28:00.105  INFO 16461 --- [pool-5-thread-1]     : Shared EntityManager proxy for target factory [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@ba1a239]
2019-10-15 10:28:00.105  INFO 16461 --- [pool-5-thread-1]     : AUTO
// --- next call of scheduler
2019-10-15 10:28:00.105  INFO 16461 --- [pool-5-thread-4]     : Shared EntityManager proxy for target factory [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@ba1a239]
2019-10-15 10:28:00.105  INFO 16461 --- [pool-5-thread-4]     : AUTO

Достаточно ли этого доказательства или что-то, о чем мы не знаем?

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