【问题标题】:Spring Data JPA : externalize to a property file the @EnableJpaRepositories basePackages configurationSpring Data JPA:将@EnableJpaRepositories basePackages 配置外部化到属性文件
【发布时间】:2018-10-25 15:32:13
【问题描述】:

我想将@EnableJPARepositories basePackages 的配置外部化。

下面有两个不同的示例包

  • com.project.ph.dao
  • sample.project.jpa.repositories

我在下面尝试了属性外部化(不适用于多个包)

ProjectConfig.class

@EnableJpaRepositories(basePackages = {"${basePackages}"})

config.properties

basePackages=com.project.ph.dao,sample.project.jpa.repositories

有没有其他方法可以将此配置外部化为多个包?

谢谢!

【问题讨论】:

  • 不,没有。注释的属性具有静态值,您是否真的想从外部控制它,这基本上意味着您已经失去了对应用程序中引导的内容的控制。
  • 您不能在@EnableJpaRepositories 注释属性中使用属性占位符来获取一些包而不是一个带有属性占位符的字符串,但是您可以在其中制作自己的“@EnableJpaRepositoriesWithProperties”注释将工作,请参阅以下答案:stackoverflow.com/questions/47635650/…

标签: java spring spring-data spring-data-jpa spring-repositories


【解决方案1】:

不,您不能在 @EnableJpaRepositories 注释中使用 SPEL。原因是注释可能存在于配置 bean 上,并定义了其他属性源,这些属性源可以覆盖注释中使用的属性,因此您将有一个鸡和蛋的场景尝试加载 bean。但是你仍然可以使用 Spring 的配置机制来解决你的问题。

使用 Spring Boot

不要在单个类中声明所有包,而是使用 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

没有 Spring Boot

这与此类似,除了不使用@ConditionalOnProperty,您只需使用@Conditional。这需要您实现一个 Condition 类来检查属性。

附加说明

当使用@EnableJpaRepositories注解时,默认basePackageswill be the package of the annotated class,因此您也可以将这些@Configuration bean放入com.project.ph.daosample.project.jpa.repositories包中,并从注解中删除basePackages声明.您仍然需要其余的注释,但它是一个较少硬编码的值来管理。

参考文献

【讨论】:

  • 您不能在@EnableJpaRepositories 注释属性中使用属性占位符来获取一些包而不是一个带有属性占位符的字符串,但是您可以在其中制作自己的“@EnableJpaRepositoriesWithProperties”注释将工作,请参阅以下答案:stackoverflow.com/questions/47635650/…
猜你喜欢
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
相关资源
最近更新 更多