gpt4 book ai didi

java - Spring 数据JPA : externalize to a property file the @EnableJpaRepositories basePackages configuration

转载 作者:行者123 更新时间:2023-12-02 03:35:31 24 4
gpt4 key购买 nike

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

下面有两个不同的示例包

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

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

ProjectConfig.class

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

配置.属性

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

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

谢谢!

最佳答案

不,您不能在 @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 注释时,默认的 basePackages will be the package of the annotated class ,因此您也可以将这些 @Configuration beans 放入 com.project.ph.daosample.project.jpa.repositories 包并从注释中删除 basePackages 声明。您仍然需要其余的注释,但它是一个较少需要管理的硬编码值。

引用文献

关于java - Spring 数据JPA : externalize to a property file the @EnableJpaRepositories basePackages configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50356299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com