gpt4 book ai didi

java - Spring Boot 使用父模块的属性文件而不是它自己的

转载 作者:行者123 更新时间:2023-11-30 10:26:26 25 4
gpt4 key购买 nike

我的 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/

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