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
объявление из аннотации. Вам все еще понадобятся остальные аннотации, но это менее жестко запрограммированное значение для управления.
Рекомендации
@ConditionalOnProperty
Javadoc (docs.spring.io)@Conditional
Javadoc (docs.spring.io)Condition
Javadoc (docs.spring.io)- Документация по автоматической настройке Spring (docs.spring.io)
@EnableJpaRepositories
документация по использованию (docs.spring.io)- Дополнительная информация при работе с несколькими
DataSource
объекты (stackru.com)