Springboot 实现启动后动态修改配置
程序员文章站
2022-03-14 10:20:30
...
以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
推荐阅读
-
Springboot自带定时任务实现动态配置Cron参数方式
-
nuxt+axios实现打包后动态修改请求地址的方法
-
详解SpringBoot配置文件启动时动态配置参数方法
-
源码安装MySQL5.6.39后,修改配置文件启动报错
-
rabbitmq配置类RabbitConfig中注入RabbitTemplate后在下面设置@BeanRabbitTemplate设置消息确认时springboot启动报错的问题
-
apollo与springboot集成实现动态刷新配置的教程详解
-
SpringBoot中使用yml配置文件以及配置类实现文件上传下载路径的修改
-
SpringBoot中 @Scheduled调度任务基于nacos配置动态修改
-
SpringBoot配合Drools workbench(BusinessCentral)和maven配置实现动态规则更新
-
用 redis-sentinel 做 redis 集群,如何实现当master挂掉后,不用修改程序中的配置