Spring Data Jpa несколько @EnableJpaRepositories с BootstrapMode.DEFERRED не работает - PullRequest
0 голосов
/ 07 ноября 2018

В моем приложении Spring Boot есть два компонента DataSource, а также два компонента LocalContainerEntityManagerFactoryBean для настройки Jpa и Hibernate для каждого из них. Таким образом, у меня есть 2 Spring Java Config для них.

После обновления до Spring Boot 2.1.0 я хотел включить новый BootstrapMode BootstrapMode.DEFERRED для обеих конфигураций, но моему приложению не удалось запуститься в моих StartupTests, а также при запуске приложения в режиме реального времени.

LOG

main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFERRED mode.
main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 394ms. Found 14 repository interfaces.
main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFERRED mode.
main] o.s.boot.SpringApplication               : Application run failed

Исключение

java.lang.IllegalStateException: Could not register object
 [org.springframework.data.repository.config.DeferredRepositoryInitializationListener@422ab737]
 under bean name
 'org.springframework.data.repository.config.DeferredRepositoryInitializationListener':
 there is already object
 [org.springframework.data.repository.config.DeferredRepositoryInitializationListener@3fe512d2]
 bound  at
 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.registerSingleton(DefaultSingletonBeanRegistry.java:120)
    at
 org.springframework.beans.factory.support.DefaultListableBeanFactory.registerSingleton(DefaultListableBeanFactory.java:1027)
    at
 org.springframework.data.repository.config.RepositoryConfigurationDelegate.potentiallyLazifyRepositories(RepositoryConfigurationDelegate.java:226)
    at
 org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn(RepositoryConfigurationDelegate.java:177)
    at
 org.springframework.data.repository.config.RepositoryBeanDefinitionRegistrarSupport.registerBeanDefinitions(RepositoryBeanDefinitionRegistrarSupport.java:85)
    at
 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:364)
    at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684)
    at
 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:363)
    at
 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:145)
    at
 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:117)
    at
 org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:327)
    at
 org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:232)
    at
 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
    at
 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
    at
 org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:691)
    at
 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:528)
    at
 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
    at
 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
    at
 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
    at
 org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
    at
 org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
    at
 org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)

Мне удалось запустить приложение, когда только ONE @EnableJpaRepositories было установлено на BootstrapMode.DEFERRED, а другое на BootstrapMode.DEFAULT.

Вопрос

Итак, мой вопрос: можно ли настроить несколько конфигураций Spring с @EnableJpaRepositories и обоими BootstrapMode, установленными на DEFERRED?

1 Ответ

0 голосов
/ 27 ноября 2018

Настройка BootstrapMode.LAZY работает с несколькими ЭМП. У меня была такая же проблема с режимом DEFERRED.

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