本文共 1764 字,大约阅读时间需要 5 分钟。
以SpringCloud 为例,希望服务在启动后根据某些信息生成一个动态的 实例ID
也就是application.yaml
中配置的如Eureka
的配置
eureka: instance: instance-id: ID
我们如果希望在服务启动时候随机生成一个instance-id
,首先找到
可以使用BeanPostProcessor
在Bean实例化之后对他进行修改eureka.instance
这个属性绑定到的Bean,通过在application.yaml
按住Ctril + 左键
点击可以找到org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean
。
接下在使用后处理器在实例化之后对属性进行调整即可
@Componentpublic class EurekaConfigBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof EurekaInstanceConfigBean) { EurekaInstanceConfigBean properties = (EurekaInstanceConfigBean) bean; String instanceId = properties.getInstanceId(); System.out.println("Old InstanceID: " + instanceId); instanceId = UUID.randomUUID().toString(); // 修改ID properties.setInstanceId(instanceId); } return null; }}
这样在注册中心我们就可以看见我们自定义的ID。
这里主要是找到配置文件中对应配置的Config对象。
下面是SpringCloud consul动态修改实例ID的示例,Consul的配置实例为org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties
类:
@Componentpublic class ConsulConfigPostProcessorDemo implements BeanPostProcessor { @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof ConsulDiscoveryProperties) { ConsulDiscoveryProperties properties = (ConsulDiscoveryProperties) bean; String instanceId = properties.getInstanceId(); System.out.println("InstanceID: " + instanceId); instanceId += "__MODIFY"; properties.setInstanceId(instanceId); } return null; }}
[1].
转载地址:http://acqof.baihongyu.com/