我的 Java 项目具有以下结构:
module/
pom.xml
config/
application.properties
src/main/java/
spring boot application
submodule/
pom.xml
src/
main/
java/
spring boot application
resources/
submodule.properties
父模块中的 Spring Boot 应用程序应从 config/application.properties
读取其属性。 ,而子模块中的 Spring Boot 应用程序应使用 submodule/src/main/resources/submodule.properties
.
但是,无论我做什么,子模块中的应用程序都会继续使用父模块的属性文件。特别是,
@PropertySource("classpath:submodule.properties")
没有任何效果。添加也不行
<context:property-placeholder location="submodule.properties" />
到子模块的应用程序上下文。关于如何使子模块中的应用程序仅使用其自己的属性文件而不使用其父级的属性文件,有什么建议吗?
编辑:十五分钟后,我意识到子模块的属性文件确实被使用,但无论出于何种原因,外部 config/application.properties
文件的优先级高于内部模块自己的属性文件。
这种行为对我来说毫无意义,因为人们会认为模块内的属性对于该模块来说更具体,因此让内部属性文件覆盖外部文件会更有意义。
有谁知道一种方法来关闭此行为,并让内部属性文件覆盖外部属性文件?
最佳答案
Spring Boot 自动查找 application.properties 文件并使这些属性可用。由于这些属性将在父项目中首先加载,因此它们的属性将优先于子模块中的任何属性。
如果您不希望子模块加载 application.properties 那么我建议重命名它,以便 Spring Boot 不会自动拾取它,然后您可以在需要的地方自行注册它:
@PropertySource("classpath:renamed-application.properties")
如果您的目的是仅覆盖 application.properties 中的某些属性并仍然使用其余属性,那么这显然行不通。但实际上父 application.properties 中的所有属性对于所有子模块都应该是通用的。如果您要覆盖该行为,那么实际上您应该为这些特定的子模块使用不同的属性名称,因为它是特定于该模块的。
关于java - Spring Boot 使用父模块的属性文件而不是自己的属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45712306/