Spring Data JPA: выводить в файл свойств конфигурацию basePackages @EnableJpaRepositories - PullRequest
0 голосов
/ 15 мая 2018

Я хотел экспортировать конфигурацию для базовых пакетов @EnableJPARepositories.

У меня есть два разных примера пакетов ниже

  • com.project.ph.dao
  • sample.project.jpa.repositories

Я попробовал экстернализацию свойств ниже (не работает для нескольких пакетов)

ProjectConfig.class

@EnableJpaRepositories(basePackages = {"${basePackages}"})

config.properties

basePackages=com.project.ph.dao,sample.project.jpa.repositories

Есть ли какой-либо другой способ экстернализации этой конфигурации для нескольких пакетов?

Спасибо!

1 Ответ

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

Нет, вы не можете использовать SPEL внутри аннотации @EnableJpaRepositories. Причина в том, что аннотация может существовать в бине конфигурации с определенными дополнительными источниками свойств, которые могут переопределять свойства, используемые в аннотации, поэтому у вас будет сценарий «курица и яйцо», пытающийся загрузить бины. Но вы все равно можете решить свою проблему, используя механизмы конфигурации Spring.

с пружинным чехлом

Вместо того, чтобы объявлять все пакеты в одном классе, создайте два или более компонента @Configuration, которые включаются на основе свойств, используя аннотацию @ConditionalOnProperty из Spring Boot, например ::

@Configuration
@EnableJpaRepositories(basePackages = "com.project.ph.dao")
@ConditionalOnProperty("com.project.ph.dao.enabled")
public class PhProjectRepostoriesConfiguration {
}

А потом еще:

@Configuration
@EnableJpaRepositories(basePackages = "sample.project.jpa.repositories")
@ConditionalOnProperty("sample.project.jpa.repositories.enabled")
public class SampleProjectRepostoriesConfiguration {
}

Тогда в вашем application.properties файле:

sample.project.jpa.repositories.enabled=true
com.project.ph.dao.enabled=false

без пружинного чехла

Это аналогично, за исключением того, что вместо @ConditionalOnProperty вы просто используете @Conditional. Это требует от вас реализации класса Condition, который будет проверять свойства.

Дополнительные примечания

При использовании аннотации @EnableJpaRepositories по умолчанию basePackages будет пакетом аннотированного класса , поэтому вы также можете опустить эти @Configuration bean-компоненты в com.project.ph.dao и sample.project.jpa.repositories пакеты и удалите объявление basePackages из аннотации. Вам все еще понадобятся остальные аннотации, но это менее жестко запрограммированное значение для управления.

Ссылки

...