java - Spring Data JPA:将@EnableJpaRepositories basePackages 配置外部化到属性文件
问题描述
我想将@EnableJPARepositories basePackages 的配置外部化。
我在下面有两个不同的示例包
- com.project.ph.dao
- sample.project.jpa.repositories
我在下面尝试了属性外部化(不适用于多个包)
项目配置类
@EnableJpaRepositories(basePackages = {"${basePackages}"})
配置属性
basePackages=com.project.ph.dao,sample.project.jpa.repositories
有没有其他方法可以将此配置外部化为多个包?
谢谢!
解决方案
不,您不能在@EnableJpaRepositories
注释中使用 SPEL。原因是注释可能存在于配置 bean 上,并定义了其他属性源,这些属性源可以覆盖注释中使用的属性,因此您将有一个鸡和蛋的场景尝试加载 bean。但是您仍然可以使用 Spring 的配置机制来解决您的问题。
使用 Spring Boot
与其在单个类中声明所有包,不如使用Spring Boot 中的注释创建两个或多个@Configuration
基于属性启用的 bean ,例如:@ConditionalOnProperty
@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
为注解类的包,因此您也可以将这些@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)- Spring 自动配置文档(docs.spring.io)
@EnableJpaRepositories
使用文档(docs.spring.io)- 处理多个
DataSource
对象时的附加信息(stackoverflow.com)
推荐阅读
- amazon-web-services - 将整数参数传递给 AWS StepFunction 导致无效的状态机定义
- html - HTML - 如何将信息作为属性值存储在 HTML 标签中?
- swift - 核心数据:无法识别的选择器发送到实例错误
- installation - 尝试安装带有货物的软件包时出现“错误:指定的软件包没有二进制文件”?
- reactjs - 如何使用 onClick 方法通过 react-router 传递道具
- javascript - 无法重置表单输入字段(React JS 控制组件)
- python - while_loop 中的层初始化:“控制流构造中的变量初始化器”
- python - 从 FTP 目录打开压缩文件的简单方法
- python-3.x - 为什么这个 VAE 实现有时会添加一个 sigmoid 操作?
- php - WordPress:从我的内容模板中删除 get_the_title