不,您不能在@EnableJpaRepositories
注释中使用 SPEL。原因是注释可能存在于配置 bean 上,并定义了其他属性源,这些属性源可以覆盖注释中使用的属性,因此您将有一个鸡和蛋的场景尝试加载 bean。但是您仍然可以使用 Spring 的配置机制来解决您的问题。
使用 Spring Boot
与其在单个类中声明所有包,不如使用Spring Boot 中的注释创建两个或多个@Configuration
基于属性启用的 bean ,例如:@ConditionalOnProperty
@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
没有 Spring Boot
这是相似的,除了@ConditionalOnProperty
你将只使用@Conditional
. 这需要您实现一个Condition
将检查属性的类。
补充笔记
使用@EnableJpaRepositories
注解时,默认basePackages
为注解类的包,因此您也可以将这些@Configuration
bean 放入com.project.ph.dao
和sample.project.jpa.repositories
包中,并basePackages
从注解中删除声明。您仍然需要其余的注释,但它是一个较少硬编码的值来管理。
参考