Springboot 实现启动后动态修改配置

以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

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目介绍】 基于springboot+Vue的前后端分离ACM比赛管理系统源码+sql数据库.zip 基于springboot+Vue的前后端分离ACM比赛管理系统源码+sql数据库.zip 基于springboot+Vue的前后端分离ACM比赛管理系统源码+sql数据库.zip 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶, 或者实际项目借鉴参考! 当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 1.前言 - **hotelMange** 是由于学校数据库课设而诞生 - 次项目为简单DEMO现已不再更新 ## 2.解释 - **guest** 为后端模块,可直接用idea打开运行 - **vue-manage-system** 为前端模块,可直接用webstorm打开运行 ## 3.开始步骤 - 下载/克隆两个文件夹分别用 idea & webstorm打开 ### 3.1 后端guest模块启动 - **将guest.sql导入 (存在resource目录下的)** - 修改application.yaml中的数据库配置(用户名,密码,端口号) ![MySQL](https://s2.loli.net/2023/03/22/VNq95vFDs3QocE4.png) - 直接运行即可 > **数据库版本请用 5.6.X 版本** > > 后端运行成功后可直接访问swagger文档:http://localhost:80/swagger-ui.html > > 已将前端文件放入后端,也可直接访问登陆页面:http://localhost/#/login ### 2.3 前端vue-manage-system模块启动 - 安装项目依赖 ```bash npm install --registry=https://registry.npm.taobao.org ``` - 开启服务器,浏览器访问 http://localhost:8080 ``` npm run serve ```
好的,对于使用Druid连接池的Spring Boot 2.5.5应用程序,您需要在启动类中进行以下配置: 1.引入Druid依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency> ``` 2.配置数据源 在application.properties或application.yml中添加以下配置: ```yaml spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 3.配置Druid连接池 在启动类中添加以下代码: ```java @Configuration public class DruidConfig { @Bean public ServletRegistrationBean<StatViewServlet> druidServlet() { ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*"); registrationBean.addInitParameter("allow", "127.0.0.1"); registrationBean.addInitParameter("deny", "192.168.1.100"); registrationBean.addInitParameter("loginUsername", "admin"); registrationBean.addInitParameter("loginPassword", "123456"); return registrationBean; } @Bean public FilterRegistrationBean<WebStatFilter> filterRegistrationBean() { FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>(new WebStatFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return registrationBean; } @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource druidDataSource() { return new DruidDataSource(); } } ``` 以上代码中,我们配置了Druid的Servlet和Filter,并且创建了一个Druid连接池的DataSource。 注意:以上代码中的url、username和password需要根据您的实际情况进行修改。 希望这能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值