java - 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 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/

相关文章:

java - 通过Java配置运行Spring MVC的问题

java - Spring @transactional 不回滚

java - 在 java 中集成quartz config xml 和 spring 时出现此异常

json - 具有枚举键的 Map 的 GSON 自定义序列化器

java - 从.sql加载模式以在Spring Boot中创建orm映射

java - Spring Cloud Config 属性的加载优先级是什么?

java - Java 中 MongoDB ObjectId 的 Base64 字符串表示形式?

java - 数组中的 4 位数字作为字符串

java - Spring应用程序上下文无法在maven资源文件夹下找到属性文件

java - 瓦丁 + springBoot : IllegalStateException on Build