覆盖子项目中定义的application.properties的父项目中的单个属性?

时间:2018-01-18 13:09:14

标签: java spring spring-boot properties-file

我有一个项目,我们称之为BaseProject,其中包含定义不同配置的属性文件。其中一个属性可能是security.password.minlength=4

现在我有一个ProjectA,它会在BaseProject上构建,并且取决于它。

ProjectA
   |
   |--BaseProject

现在在ProjectA我希望默认security.password.minlength为8。

如果我只是将application.properties文件添加到我的ProjectA,其中包含security.password.minlength=8,并且特定属性设置为8.我强调所有其他属性形成我的BaseProject现在被忽略,给我例外:java.lang.IllegalArgumentException: Could not resolve placeholder

我仍然想使用BaseProject中定义的所有属性,但只将security.password.minlength设置为不同的值。我怎样才能做到这一点?

更新

目前我让Spring处理application.properties文件。在我的应用程序中,我只是从Spring环境中获取值。

2 个答案:

答案 0 :(得分:1)

如果您使用Spring Boot的默认属性处理,则可以使用配置文件。例如。您可以为派生项目使用名为projecta的配置文件,并在名为application-projecta.properties的文件中指定您的属性。当您指定要激活的配置文件时,将自动获取此信息(请参阅此处:http://www.baeldung.com/spring-profiles

答案 1 :(得分:0)

我找到了以下解决方案:

BaseProjectapplication.properties,其中包含所有默认值。

ProjectAprojectA.properties我与

集成
@PropertySource("projectA.properties")
public class ProjectA {

    public static void main(String[] args) {
    SpringApplication.run(ProjectA .class, args);
    }
}

这允许我覆盖BaseProject文件中projectA.properties项目的任何属性。我未在projectA.properties中定义的属性仍然来自BaseProject的application.properties