Настройка Spring Boot для одновременного использования H2 и Oracle - PullRequest
0 голосов
/ 30 октября 2019

Я пишу задание Spring Batch и не беспокоюсь о перезапусках, и мне не нужны хлопоты по созданию, защите и управлению схемой Oracle для объектов базы данных Spring Batch. Н2 в файловой системе нам более чем достаточно.

Проблема в том, что я пишу пакетное задание, которое требует подключения к базе данных Oracle, и терпит неудачу, просто пытаясь получить 2 источника данных, менеджеров транзакций именеджерыСейчас я пробую две базы данных H2 и даже не пытался настроить базу данных Oracle.

В прошлом я успешно использовал два источника данных Oracle в других приложениях Spring Boot, но это моя первая попытка использования Spring Batch. у которого есть код конфигурации для создания источника данных.

Я попытался создать два DataSource, EntityManagerFactoryBean и TransactionManager, один из которых использует конфигурацию по умолчанию spring.datasources, имена бинов по умолчанию и @Primary.

Я попытался создать только секунду DataSource, EntityManagerFactoryBean и TransactionManager с разными именами бинов. Кажется, это проблема, связанная с тем, что TransactionManager or EntityManager уже назначен потоку.

Я пытался создать dataSource для пакета, но столкнулся с ошибками создания циклического компонента.

IЯ попытался создать BatchConfigurer, и это приводит к ошибкам создания циклического компонента.

Я попытался создать JobRepositoryFactoryBean, но по умолчанию все еще создается.

Я пытался использовать @PersistenceContext на моих @Entity классах.

Это не должно быть так сложно, поэтому я должен что-то упустить. Любая помощь будет оценена.

Спасибо, Уэс.

1 Ответ

0 голосов
/ 31 октября 2019

Я думаю, что у меня есть некоторый успех. В итоге я могу запустить пакетное задание, используя Spring Boot 2.2.0 и Spring Batch 4.2.0, но мне нужно подождать 5 минут, пока создается Entity Manager для H2 для репозитория Spring Batch. Oracle Entity Manager регистрируется очень быстро и до H2 Entity Manager, несмотря на то, что H2 Entity Manager равен @Primary.

У меня есть отдельный класс конфигурации для каждого из моих двух источников данных. Каждый из них помечен @Configuration, @EnableTransactionManagement и @EnableJPARepository.

. Для Spring Batch используются стандартные имена бинов dataSource, entityManagerFactory и transactionManager. Каждый @Bean помечен @Primary. Мне нужно было добавить .packages("org") к бобу entityManagerFactory. Это поднимет все org.springframework, включая Spring Batch. Единственное другое реальное изменение, которое я сделал из распространенных реализаций, - это установление диалекта в JPA-свойствах Entity Manager.

Мне понадобился параметр spring.main.allow-bean-definition-overriding: true.

Может быть большемое решение, которым я должен поделиться, но я был в этом в течение нескольких дней и ходил кругами. Я даже помню, как получал то, что выглядело как зависшее время процесса, и убивал работу, думая, что она зависла. Возможно, у меня был некоторый «успех» на ранних этапах, но он был слишком быстр, чтобы убить выполнение.

Я все еще хотел бы знать, почему создание H2 Entity Manager занимает так много времени.

Спасибо, Уэс.

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