Springboot 实现启动后动态修改配置
以SpringCloud 为例,希望服务在启动后根据某些信息生成一个动态的 实例ID也就是application.yaml中配置的如Eureka的配置eureka:instance:instance-id: ID我们如果希望在服务启动时候随机生成一个instance-id,首先找到可以使用BeanPostProcessor在Bean实例化之后对他进行修改eureka.in...
以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
。
接下在使用后处理器在实例化之后对属性进行调整即可
@Component
public 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
类:
@Component
public 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]. 萧逸才 . Spring的BeanPostProcessor接口实现Demo . https://blog.csdn.net/xyc_csdn/article/details/77427724
更多推荐
所有评论(0)