Spring Boot继承应用程序属性来自依赖项

35

假设我有5个Spring Boot项目。它们都依赖于第6个Spring Boot项目,其中包含一些共享/公共类的Maven依赖。这5个独立项目在每个application.properties文件中都有许多相同的属性,我希望将它们抽象出来并移到共同的项目中。总体来看,情况如下:

                                            Project 1 (app.properties)
Common Project (app-common.properties) <--- Project 2 (app.properties)
                                            Project 3 (app.properties)...

当前的问题是app-common.properties位于project1.jar/lib/common-project.jar内部,但显然在启动时没有加载app-common.properties。

有没有一种方法可以从依赖项中扩展它?

CommonProject主类如下:

@SpringBootApplication
public class CommonApplication extends SpringBootServletInitializer {

    protected static void run(SpringApplication application, String[] args) {
        application.run(args);
    }
}

Project1的主类看起来像这样:

public class Project1 extends CommonApplication {

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

1
不是真的。我最终将所有共同的值/属性提取到一个带有常量的Java类中,其中的值通过setter进行@Inject注入。然后在底层项目中使用该Java类。这很糟糕,但是是一个快速的解决方法。如果我将来找到更好的方法,我会在这里发布的。 - Mikhail Kholodkov
1
谢谢。我实际上尝试了Anton下面的方法,它有效了。我有一个常用的props文件在一个依赖中,使用类路径props看起来非常好。只需要在你声明@SpringBootApplication的地方加上注释即可。 - codesalsa
谢谢你的输入!基于你的成功经验,我将接受安东的答案。 - Mikhail Kholodkov
你对这里的Spring Boot应用程序配置问题有什么建议吗? - user3833308
如何在依赖中使用配置文件? - Mohan
2个回答

33

2
自Java 8以来,您可以省略父@PropertySources注释。 - Mikhail Kholodkov
你有这里的输入吗?https://dev59.com/qa_la4cB1Zd3GeqPw7bm - user3833308
如何在依赖项中使用配置文件? - Mohan

7

目前 Spring Boot 不支持属性继承。

Spring Boot 应用程序支持多种属性来源,但是对于 xxx.properties 的约定(即内置逻辑)是,如果有多个具有相同文件名的属性文件,则解析最后一个 xxx.properties 文件。

这个问题有很多解决方案。

一种可能的解决方案是:

  1. 将自定义配置文件应用到依赖项中
  2. application-customprofile.properties 中包含可继承的设置
  3. application[-{profile}].properties 中设置依赖项为 spring.profiles.include=customprofile(注意:如果在 application.properties 中设置,则适用于所有配置文件)

另一种可能的解决方案是使用唯一的自定义文件名来存储属性。

  • 例如,可以使用非默认的 common.properties 代替 application.properties

例如 java -jar myproject.jar --spring.config.name=myproject,请参阅 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files - aliopi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接