WebMvcAutoConfiguration с несколькими внешними EntityManager - PullRequest
0 голосов
/ 22 мая 2018

У меня проблема в процессе миграции существующего весеннего веб-приложения на Spring Boot 1.5.13.Я обработал почти все, но мне не удалось внедрить хороший модуль персистентности в WebMvcAutoConfiguration.На самом деле у меня есть 3 разные фабрики диспетчера сущностей, которые импортируются из пути к классам (предоставлены в виде файла .xml 3 разными внутренними библиотеками, у меня нет возможности их изменить).Каждый из них разделен следующим образом:

<sqe-db:jpa-emf database-definition-name="db-name" embedded-datasource="false"/>

и

<bean id="transaction-mnanager-name" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="jpa-lib-name" />
    </bean>

В настоящее время конфигурация источников данных предоставляется tomcat, но я перенесу их в application.properties длясреда разработки

После миграции я не нашел способа указать правильный bean-компонент для WebMvcAutoConfiguration, и это приводит к следующей ошибке:

Method requestMappingHandlerMapping in org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$EnableWebMvcConfiguration required a single bean, but 3 were found:
    - jpa-lib1-name1: defined in null
    - jpa-lib1-name2: defined in null
    - jpa-lib1-name3: defined in null

Моя цель на данный моментдолжен иметь следующую конфигурацию:

  • иметь приложение, которое может быть запущено как SpringApplication и развернуто как WAR (и я думаю, что я уже сделал это правильно)
  • имея способчтобы использовать автоконфигурацию Spring Boot для веб-приложений, даже с несколькими фабриками сущностей в classpath
  • использовать мои собственные источники данных для профиля "dev", но оставить tomcat один для другой среды.

мои реквизиты, более или менее: - минимизируют изменения, необходимые для существующего приложения - продолжают использовать .xml, предоставленный libraries

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

Любой способ объявить bean-компонент @Primary, не касаясь существующего XML-файла?

Любые идеи или другие подходы приветствуются

1 Ответ

0 голосов
/ 23 мая 2018

После хорошего сна я смог найти самое простое решение.

Я добавил это в свой класс конфигурации:

@Autowired
@Qualifier("name-of-default-factory")
private EntityManagerFactory entityManagerFactory;

@Bean
@Primary
public EntityManagerFactory getEntityManagerFactory() {
    return entityManagerFactory;
}

И теперь оно будет иметьправильно введен основной боб.

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