Нет, вы не можете использовать 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
из аннотации. Вам все еще понадобятся остальные аннотации, но это менее жестко запрограммированное значение для управления.
Ссылки