当前位置: 首页 > 知识库问答 >
问题:

Spring Data JPA:将@EnableJpaRepositoriesbasPackages配置外部化到属性文件

后阳炎
2023-03-14

我想将@EnableJPARepositories基本包的配置外部化。

我有两个不同的样品包如下

  • com。项目道博士

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

ProjectConfig.class

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

配置。性质

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

对于多个包,是否有其他方法将此配置外部化?

谢谢

共有1个答案

后焕
2023-03-14

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

不要在一个类中声明所有包,而是创建两个或多个@Configurationbean,使用Spring Boot中的@ConditionalOnProperty注释基于属性启用这些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

这是类似的,除了不使用@conditionalnproperty,您只需使用@Conditional。这要求您实现一个将检查属性的条件类。

使用@EnableJpaRepositories注释时,默认的basePackages将是注释类的包,因此您也可以将这些@Configurationbean放到com中。项目博士道样本。项目jpa。存储库打包并从注释中删除basePackages声明。您仍然需要注释的其余部分,但要管理的硬编码值少了一个。

  • @ConditionalOnPropertyJavadoc(docs.spring.io)
  • @ConditionalJavadoc(docs.spring.io)
  • ConditionJavadoc(docs.spring.io)
  • Spring自动配置文档(docs.Spring.io)
  • @EnableJpaRepositories使用文档(docs.spring.io)
  • 使用多个数据源对象时的其他信息(stackoverflow.com)

 类似资料:
  • 我试图实现的是在application.yml文件上指定一个目录,该目录直接位于类路径上(在/resources下)。我希望能有这样的东西: 使用这种方法,IDE将始终默认为application-dev.yml。当我通过gradle构建应用程序,并在传递命令行参数的同时运行它时,我可以指定配置文件,从而加载适当的文件。理想情况下,能够做到这一点: java-jar-dspring.profile

  • 我构建了一个访问数据库并从中提取数据的Spring-Boot应用程序。一切正常,但我想从外部. Properties文件配置表名。 比如: 我想找点东西,但没找到。 您可以使用注释访问外部属性。 所以我的问题是:有没有办法配置表名?或者我可以更改/拦截hibernate发送的查询吗? 解决方案: 好的,hibernate 5适用于。所以我创建了自己的。 此外,这篇关于NamingStrategy的

  • 我想在spring Boot中设置3个配置文件:production,development,test,使用外部配置文件。 应用程序类: AppConfig类:

  • 我想外部化的选项,有一个可重用的类或注释,我可以扔在排除任何数据库/Hibernate初始化。 因此,与其写: 我想创建一个注释,我可以应用到我的主类: 然后通过注释启用此功能: 问题:注释方法不起作用,Spring仍然尝试加载数据库。为什么啊? 我的最终目标是拥有多个配置文件,其中只有一个加载数据库。

  • 问题内容: 我需要能够在其中存储数据库配置属性,并以 jstl* 表达式的形式包含它。(例如:$ {password}等)。怎么做? * 当前的hibernate.cfg.xml: 我需要这样的东西: 问题答案: 您声明使用Spring,然后为什么不让Spring进行所有艰苦的工作。让属性占位符替换所需的占位符。 免费提供建议,而不使用内部hibernate连接(不建议在生产中使用),在Sprin

  • 我有一个标准的Spring靴项目。 我有一个/src/main/resources文件夹,其中有几个配置文件。 我怎样才能用Gradle做到这一点呢?