cha*_*mae 2 java spring spring-data spring-data-jpa spring-repositories
我想外部化 @EnableJPARepositories basePackages 的配置。
我下面有两个不同的示例包
我尝试了下面的属性外部化(不适用于多个包)
项目配置类
@EnableJpaRepositories(basePackages = {"${basePackages}"})
Run Code Online (Sandbox Code Playgroud)
配置属性
basePackages=com.project.ph.dao,sample.project.jpa.repositories
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以为多个包外部化此配置?
谢谢!
不,您不能在@EnableJpaRepositories注释中使用 SPEL。原因是注释可能存在于配置 bean 上,并且定义了其他属性源,这些属性源可能会覆盖注释中使用的属性,因此您会遇到尝试加载 bean 的先有鸡还是先有蛋的情况。但您仍然可以使用 Spring 的配置机制来解决您的问题。
不要在单个类中声明所有包,而是使用Spring Boot 中的注释创建两个或多个@Configuration基于属性启用的 bean ,例如:@ConditionalOnProperty
@Configuration
@EnableJpaRepositories(basePackages = "com.project.ph.dao")
@ConditionalOnProperty("com.project.ph.dao.enabled")
public class PhProjectRepostoriesConfiguration {
}
Run Code Online (Sandbox Code Playgroud)
然后是另一个:
@Configuration
@EnableJpaRepositories(basePackages = "sample.project.jpa.repositories")
@ConditionalOnProperty("sample.project.jpa.repositories.enabled")
public class SampleProjectRepostoriesConfiguration {
}
Run Code Online (Sandbox Code Playgroud)
然后在你的application.properties文件中:
sample.project.jpa.repositories.enabled=true
com.project.ph.dao.enabled=false
Run Code Online (Sandbox Code Playgroud)
这很相似,除了不使用@ConditionalOnProperty,您只需使用@Conditional. 这需要您实现一个Condition将检查属性的类。
使用@EnableJpaRepositories注解时,默认basePackages 是被注解类的包,所以你也可以将这些@Configurationbean放入com.project.ph.dao和包中,并从注解中sample.project.jpa.repositories删除声明。basePackages您仍然需要其余的注释,但它是一个较少需要管理的硬编码值。
@ConditionalOnPropertyJavadoc (docs.spring.io)@ConditionalJavadoc (docs.spring.io)ConditionJavadoc (docs.spring.io)@EnableJpaRepositories使用文档(docs.spring.io)DataSource对象时的附加信息(stackoverflow.com)| 归档时间: |
|
| 查看次数: |
2471 次 |
| 最近记录: |