Spring Data JPA: экспортировать в файл свойств конфигурацию basePackages @EnableJpaRepositories

Я хотел вывести конфигурацию для базовых пакетов @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 ответ

Нет, вы не можете использовать 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 бобы в com.project.ph.dao а также sample.project.jpa.repositories пакеты и удалить basePackages объявление из аннотации. Вам все еще понадобятся остальные аннотации, но это менее жестко запрограммированное значение для управления.

Рекомендации

Другие вопросы по тегам