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

时间:2017-08-16 11:26:42

标签: 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 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文件都具有优先级 over the inner module自己的属性文件。

这种行为对我来说没有任何意义,因为人们会认为模块中的属性对于该模块更具体,因此让内部属性文件覆盖外部文件会更有意义。

是否有人知道关闭此行为的方法,并让内部属性文件覆盖外部属性?

1 个答案:

答案 0 :(得分:1)

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

如果您不希望子模块加载application.properties,那么我建议将其重命名,以便Spring Boot不会自动选择它,然后您可以在需要的地方自行注册子模块。这样做的:

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

如果您的目的是仅覆盖application.properties中的某些属性并仍然使用其余属性,那么这显然不会起作用。但实际上,父application.properties中的所有属性都应该对所有子模块都是通用的。如果要覆盖该行为,那么实际上您应该为这些特定子模块使用不同的属性名称,因为它特定于该模块。