在我们公司,我们使用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