栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

@ConfigurationProperties灵活的映射配置信息

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

@ConfigurationProperties灵活的映射配置信息

介绍

在用@ConfigurationProperties最常用的功能是用此注解对类进行修饰,设置好prefix前缀,这样在springboot的配置文件中,配置信息的key和value就会对应的配置到类中的属性上。

以设置eureka信息为例设置实例id
@ConfigurationProperties("eureka.instance")
public class EurekaInstanceConfigBean
		implements CloudEurekaInstanceConfig, EnvironmentAware {

	private static final String UNKNOWN = "unknown";


	
	private String instanceId;

	

}
eureka:
  instance:
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

一般都是这么使用的。但还有一种情况,要加上新的配置信息,但又不想在@ConfigurationProperties类中添加新的属性值,想要更加的灵活。这种情况一般用于对于框架的扩展,又不能修改源码的情况下。

这时,可以在类中设置Map类型的属性,这样既不用添加或修改属性,又能实现灵活的设置添加和删除配置信息。

仍以eureka为例
@ConfigurationProperties("eureka.instance")
public class EurekaInstanceConfigBean
		implements CloudEurekaInstanceConfig, EnvironmentAware {

	private static final String UNKNOWN = "unknown";


	
	private Map metadataMap = new HashMap<>();

	

}
eureka:
  instance:
    metadata-map:
      test-flag: true

这样metadataMap 中就有了以test-flag为key,true为value的配置信息。

nacos中也提供了这样的配置

以nacos为例
@ConfigurationProperties("spring.cloud.nacos.discovery")
public class NacosDiscoveryProperties {

	private static final Logger log = LoggerFactory
			.getLogger(NacosDiscoveryProperties.class);


	public static final String PREFIX = "spring.cloud.nacos.discovery";

	

	
	private Map metadata = new HashMap<>();

	
	
}
spring:
  cloud:
    nacos:
      discovery:
        metadata:
          test-flag: true

eureka和nacos这样做,也是为了让我们用户来灵活的存放自己设置的信息来达到想要的功能。当灰度和生产使用同一个注册中心来做环境隔离的负载均衡功能正好可以利用这一点。

思路
  • 先设置一个灰度标识,利用这种灵活的配置特性放到eureka或nacos中服务列表中
  • 继承ribbon-loadbalance中的AbstractServerPredicate,重写apply(PredicateKey input)方法,此方法作用是当ribbon从eureka或nacos获取了服务列表后,列表要循环调用此方法,返回true保留,返回false则过滤掉。
  • 在apply(PredicateKey input)方法中,通过查看服务中的request中灰度标识。
    • 如果为false,则为生产环境的请求。和eureka或nacos中服务列表中的灰度标识进行对比,也为false的,说明是生产的服务,则apply(PredicateKey input)返回true保留。为true的说明为灰度服务,则apply(PredicateKey input)返回false过滤掉。
    • 如果为true,则为灰度环境的请求。和eureka或nacos中服务列表中的灰度标识进行对比,为false的,说明是生产的服务,则apply(PredicateKey input)返回false过滤掉。为true的说明为灰度服务,则apply(PredicateKey input)返回true保留。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号