我想外部化@EnableJPARepositories basePackages的配置。
我有两个不同的样本包
我在下面尝试过属性外化(不适用于多个包)
ProjectConfig.class
@EnableJpaRepositories(basePackages = {"${basePackages}"})
config.properties
basePackages=com.project.ph.dao,sample.project.jpa.repositories
是否有其他方法可以为多个包外部化此配置?
谢谢!
答案 0 :(得分:0)
不,您无法在@EnableJpaRepositories
注释中使用SPEL。原因是注释可能存在于配置bean上,并且定义了可以覆盖注释中使用的属性的其他属性源,因此您尝试加载Bean并尝试鸡蛋和鸡蛋。但是你仍然可以使用Spring的配置机制来解决你的问题。
不是在单个类中声明所有包,而是使用Spring Boot中的@ConditionalOnProperty
注释创建两个或更多基于属性启用的@Configuration
bean,例如:
@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
will be the package of the annotated class,因此您也可以将这些@Configuration
bean放入com.project.ph.dao
和sample.project.jpa.repositories
包并从注释中删除basePackages
声明。您仍然需要其余的注释,但它需要管理的硬编码值较少。
@ConditionalOnProperty
Javadoc(docs.spring.io)@Conditional
Javadoc(docs.spring.io)Condition
Javadoc(docs.spring.io)@EnableJpaRepositories
usage documentation(docs.spring.io)DataSource
objects(stackoverflow.com)