Java 使用父模块的属性文件而不是自己的属性文件进行Spring引导

Java 使用父模块的属性文件而不是自己的属性文件进行Spring引导,java,spring,spring-boot,Java,Spring,Spring Boot,我的Java项目具有以下结构: module/ pom.xml config/ application.properties src/main/java/ spring boot application submodule/ pom.xml src/ main/ java/ spring boot appl

我的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”)

没有任何效果。添加也不是

到子模块的应用程序上下文。关于如何使子模块中的应用程序仅使用其自己的属性文件而不使用其父级属性文件,有何建议

编辑:十五分钟后,我意识到子模块的属性文件确实被使用了,但是出于任何原因,外部
config/application.properties
文件的优先级高于内部模块自己的属性文件

这种行为对我来说毫无意义,因为有人会认为模块内的属性更特定于该模块,因此让内部属性文件覆盖外部文件会更有意义


有人知道如何关闭此行为,并让内部属性文件覆盖外部属性文件吗?

Spring Boot会自动查找application.properties文件并使这些属性可用。由于这些属性将在父项目中首先加载,因此它们的属性将优先于子模块中的任何属性

如果您不希望子模块加载application.properties,那么我建议重命名它,这样它就不会被Spring Boot自动拾取,然后您可以通过执行以下操作,在需要时自行注册它:

@PropertySource("classpath:renamed-application.properties")

如果您的意图是只覆盖application.properties中的一些属性,而仍然使用其余的属性,那么这显然是行不通的。但实际上,父应用程序中的所有属性。属性对于所有子模块都应该是公共的。如果您要覆盖该行为,那么实际上您应该为这些特定子模块使用不同的属性名称,因为它是该模块的特定属性。

查找
应用程序.properties
文件不是Spring Boot的默认行为吗?尝试将
子模块.properties
重命名为
应用程序.properties
。没关系,同样的情况也会发生。但是看看我的编辑。是的,我已经看过了。为什么是模块结构呢?结果是什么?模块jar中的jar(子模块)?如果是这样的话,那当然是有道理的。“父/子”层次结构是另一个层次结构。这是一个模块/依赖层次结构。因此,您的模块覆盖子模块中的设置是正常的。例如,与设置hibernate的属性完全相同