在外部库上定义Spring应用程序属性的默认值

时间:2018-02-03 19:55:05

标签: spring spring-boot spring-cloud

在我们公司,我们使用Spring Boot构建了100多项服务。这些服务中的大多数共享配置值,允许我们配置这些应用程序在Eureka上注册的方式,从Kafka中消耗等等。此配置在大多数服务的application.yml文件中指定,我们希望避免重复这些值,因此我们希望将此常见配置移动到依赖项,当添加到类路径时,将使您不再需要配置这些值。

我通过创建一个包含不同@Configuration类的新库来实现它,这些类使用正确的值配置不同的bean。所以现在应用程序只需要将这个库添加到build.gradle文件中,并且已经配置好了。

问题是,如果其中一个应用程序需要覆盖这些bean的任何值,那么在application.yml文件中指定配置将不起作用,因为我直接将正确的值设置为豆子。

例如,如果我的库声明了这个Bean

    @Bean
    @Profile("aws")
    public EurekaInstanceConfigBean eurekaInstanceConfigAWS(InetUtils inetUtils) {
        EurekaInstanceConfigBean eurekaInstanceConfigBean = new EurekaInstanceConfigBean(inetUtils);
        AmazonInfo info = AmazonInfo.Builder.newBuilder().autoBuild("eureka");
        eurekaInstanceConfigBean.setDataCenterInfo(info);

        eurekaInstanceConfigBean.setInstanceId(info.get(AmazonInfo.MetaDataKey.instanceId));
        eurekaInstanceConfigBean.setHostname(info.get(AmazonInfo.MetaDataKey.localHostname));
        eurekaInstanceConfigBean.setIpAddress(info.get(AmazonInfo.MetaDataKey.localIpv4));

        return eurekaInstanceConfigBean;
    }

有人在application.yml上指明他们想要一个不同的主机名,如

eureka:
  instance:
    hostname: some-custom-value.example.com

将被忽略:将使用bean中的配置集,而不是本地application.yml值。

有没有办法在这里实现一个优先顺序,application.yml上指定的值比来自库的bean的值更重要?我想要一个优先权:

local application.yml>库中的bean配置> bean默认来自spring-boot / spring-cloud

0 个答案:

没有答案