Spring Boot从依赖项

时间:2016-02-26 23:35:35

标签: spring spring-boot

我们说我有5个Spring Boot项目。所有这些都有一个Maven依赖于Spring Boot项目No 6和一些共享/公共类。 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 Main class如下所示:

@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);
    }
}

2 个答案:

答案 0 :(得分:13)

使用PropertySource注释并为您的应用提供两个来源:

@PropertySources({
        @PropertySource("classpath:app-common.properties"),
        @PropertySource("classpath:app.properties")
    })

可以在那里找到更多细节 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

答案 1 :(得分:3)

目前春季启动并不提供继承属性。

Spring引导应用程序支持多个属性源,但xxx.properties的约定(读取:内置逻辑)是在有多个属性文件具有相同文件名的情况下解析最后xxx.properties

有很多解决方案。

一种可能的解决方案是

  1. 将自定义配置文件应用于依赖项
  2. application-customprofile.properties
  3. 中包含可继承的设置
  4. spring.profiles.include=customprofile中设置了application[-{profile}].properties的从属关系(注意:如果在application.properties中设置,则适用于所有个人资料)
  5. 另一种可能的解决方案是为属性使用唯一的自定义文件名。

    • 即。而不是使用默认application.properties,请使用common.properties