nacos支持配置文件热部署(@RefreshScope注解)

2023-11-04

nacos支持配置文件热部署

1.原理

  @RefreshScope注解实现的原理,是刷新bean

2.定义的变量,在代码中用变量来接,直接在代码块里面使用

示例 :
1.在配置文件定义一个share.config的属性,

share:
  config: 测试配置2
                 

2.代码中需要在本类上增加 @RefreshScope,@Value下的属性就会自动刷新

@RestController
@RequestMapping("/app")
@RefreshScope
public class AppController {
   
   @Value("${share.config}")
   private String shareConfig;

   @GetMapping("/shareConfig")
   public String shareConfig() {
       return shareConfig;
   }
}  

3.工具类中的,定义的静态变量,调用静态方法(简单的)

 原理:静态变量无法使用注解刷新,我们在调用静态方法时,重新获取变量最新的值,然后进行赋值

示例 :
1.在配置文件增加一个rabbitmq的属性

spring:
  # rabbitmq 配置
  rabbitmq:
    username: user123
    # 密码
    password: 123456    

2.在类上增加@RefreshScope 注解,用@Value 注入,在调用静态方法getMessageConnect()时,重新获取该bean,该类下的静态属性就会刷新

@Component
@RefreshScope
public class MessageUtil {

    private static AuthorizeImpl AUTHORIZE;

    private static String RABBITMQ_USERNAME;

    private static String RABBITMQ_PASSWORD;

    private static String MESSAGE_URL;

    @Value("${spring.rabbitmq.username}")
    public void setUsername(String username) {
        MessageUtil.RABBITMQ_USERNAME = username;
    }

    @Value("${spring.rabbitmq.password}")
    public void setPassword(String password) {
        MessageUtil.RABBITMQ_PASSWORD = password;
    }

    @Value("${spring.message.url:null}")
    public void setMessageUrl(String messageUrl) {
        MessageUtil.MESSAGE_URL = messageUrl;
    }

    @Autowired
    public void setAuthorizeImpl(AuthorizeImpl authorize) {
        MessageUtil.AUTHORIZE = authorize;
    }

    public static MessageConnectVO getMessageConnect(String tokenId) {
        MessageConnectVO messageConnectVO = new MessageConnectVO();
        //这里重新获取一次Bean,取到最新的配置属性,因为静态方法里面不会自动刷新
        BeanUtil.getInstanceByClassName(MessageUtil.class);
        UserInfoDTO tokenInfo = AUTHORIZE.getUserInfoByTokenId(tokenId);
        messageConnectVO.setUserId(tokenInfo.getUserId().toString());
        messageConnectVO.setOrganizationId(tokenInfo.getOrganizationId().toString());
        messageConnectVO.setPasscode(MessageUtil.RABBITMQ_PASSWORD);
        messageConnectVO.setLogin(MessageUtil.RABBITMQ_USERNAME);
        messageConnectVO.setUrl(MessageUtil.MESSAGE_URL);
        return messageConnectVO;
    }
}

4.框架通过配置文件读取之后,自动注入的属性相关配置,如数据源

示例:
1.这是配置文件里面的数据源:

spring: 
datasource: 
  driver-class-name: com.mysql.cj.jdbc.Driver
  url: jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=true&autoReconnect=true&failOverReadOnly=false
  username: root
  password: 123456          

2.代码适配:需要再重新写一个数据源配置类,并在使用的类,和调用到数据源的bean上增加@RefreshScope注解

@Configuration
@MapperScan(basePackages = {"com.lzmispt.core.dao", "com.lzmispt.monitor.web.mapper"}, sqlSessionFactoryRef = "monitorSqlSessionFactory")
@RefreshScope
public class MonitorSourceConfig {

    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;

    @Value("${spring.datasource.url}")
    private String url;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @Bean("monitorDataSource")
    @RefreshScope
    public DataSource dataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(driverClassName);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        return druidDataSource;
    }

    @Bean("monitorTransactionManager")
    @RefreshScope
    public PlatformTransactionManager platformTransactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

    @Bean("monitorSqlSessionFactory")
    @RefreshScope
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        DataSource dataSource = dataSource();
        factoryBean.setDataSource(dataSource);
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        List<Resource> resources = new ArrayList<>();

        getAdaptResources(resolver, resources, dataSource);
        Resource[] resourceArr = new Resource[resources.size()];
        factoryBean.setMapperLocations(resources.toArray(resourceArr));
        return factoryBean.getObject();
    }

    private void getAdaptResources(ResourcePatternResolver resolver, List<Resource> resources, DataSource dataSource) throws Exception {
        resources.addAll(Arrays.asList(resolver.getResources("classpath*:mapper/*.xml")));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nacos支持配置文件热部署(@RefreshScope注解) 的相关文章

  • Eclipse 在源代码管理中保存操作

    我们希望找到一种在签入之前执行代码标准的 轻量级 方法 我们真的很喜欢使用 Eclipse 内置的想法保存操作 go to Preferences gt gt Java gt gt Editor gt gt Save Actions 其中有
  • 如何使用 Java 中的 Web 服务(例如 Axis2)发送复杂对象的数组或集合?

    我对 SOAP Web 服务还比较陌生 虽然我完成了一些较小的 Web 服务项目 但我偶然从来不需要返回 或用作参数 复杂 对象的数组或集合 当我尝试这样做时 根据我的 SOAP 绑定风格 我会得到不同的奇怪行为 当我使用RPC 文字 我可
  • 如何创建一个显示 Spinners 的 x 和 y 值的表格?

    我想创建一个位于图表右侧的表格 其中显示 2 列 x 和 y 值已输入到xSpin and ySpin旋转器 我已经画了一张我想要桌子放置的位置的图 我尝试过在网格窗格布局中使用文本框来创建表格并将值直接输入到文本框网格中 但是我无法将它们
  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • 当从服务类中调用时,Spring @Transactional 不适用于带注释的方法

    在下面的代码中 当方法内部 是从内部调用的方法外部 应该在交易范围内 但事实并非如此 但当方法内部 直接从调用我的控制器class 它受到事务的约束 有什么解释吗 这是控制器类 Controller public class MyContr
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • 如何使用 Maven 打包并运行具有依赖项的简单命令行应用程序?

    我对 java 和 Maven 都是全新的 所以这可能非常简单 如果我遵循maven2hello world此处的说明 http maven apache org guides getting started maven in Five m
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • IntelliJ - 调试模式 - 在程序内存中搜索文本

    我正在与无证的第三方库合作 我知道有一定的String存储在库深处的某个字段中的某处 我可以预测的动态值 但我想从库的 API 中获取它 有没有一种方法可以通过以下方式进行搜索 类似于全文搜索 full程序内存处于调试模式并在某个断点处停止
  • Java整数双除法混淆[重复]

    这个问题在这里已经有答案了 方案1 int sum 30 double avg sum 4 result is 7 0 not 7 5 VS 方案2 int sum 30 double avg sum 4 0 Prints lns 7 5
  • Struts 2 + Sitemesh 3 集成 - FreemarkerDecoratorServlet 中的 NPE

    我将 Struts 2 版本 2 3 14 3 与 Sitemesh 3 版本 3 0 alpha 2 一起使用 并且在某些情况下遇到 NullPointerException 首先 这是我的 web xml 中的 struts2 site
  • Netty:阻止调用以获取连接的服务器通道?

    呼吁ServerBootstrap bind 返回一个Channel但这不是在Connected状态 因此不能用于写入客户端 Netty 文档中的所有示例都显示写入Channel从它的ChannelHandler的事件如channelCon
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的
  • 如何在 JFreeChart 中设置多个系列的线条粗细?

    我创建了很多图表 在他们每个人中我都需要打电话 renderer setSeriesStroke i new BasicStroke 2 0f 对于每个系列 renderer is chart getXYPlot getRenderer 我

随机推荐

  • Maven仓库的配置

    目录 引言 一 准备工作 编辑二 环境变量的设置 二 maven仓库的设置 1 本地仓库设置 2 配置阿里云提供的镜像仓库 3 配置maven仓库的基础jdk版本 三 maven仓库在IDEA中的配置 引言 Maven 是 Apache 软
  • 单片机c51中断 — 中断嵌套实例IE0的置位和撤销

    项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第五章 中断 根据下原理图 编程验证二级外部中断嵌套效果 其中K0定为低优先级中断源 K1为高优先级中断源 此外 利用发光二极管D1验证外部中断请求标志IE0在脉冲触发中断时
  • Javascript基础介绍与arguments对象,console对象,json对象详述

    Javascript基础 Javascript基础 前言介绍与引用 基础语法 基础逻辑控制语句 数据类型 对象 属性与方法的区别 数组 函数 典例 setTimeout 函数声明 构建 作用域 类型转换 温习对象概念 arguments 隐
  • 2022-2027年中国重工行业市场全景评估及发展战略规划报告

    报告格式 电子版 纸介版 出品单位 华经产业研究院 本报告由华经产业研究院出品 对中国重工行业的发展现状 竞争格局及市场供需形势进行了具体分析 并从行业的政策环境 经济环境 社会环境及技术环境等方面分析行业面临的机遇及挑战 还重点分析了重点
  • 【文献阅读】数据重采样+特征选择(1)

    目录 1 面向不均衡数据的多分类集成算法 1 1 两阶段采样 1 2 算法整体框架 1 3 实验 1 4 期刊 2 基于多阶段混合集成的中小企业信用风险评价 3 基于边界自适应SMOTE和FocalLoss函数改进LightGBM的信用风险
  • flask的安装与使用

    说明 最近的项目需要用到flask 貌似3年前用过 不过很久没搞了 以前java web比较熟 这里做个简单的入门记录 官网 http docs jinkan org docs flask 下载与安装 pip install flask 建
  • 云计算时代——本质、技术、创新、战略

    云计算时代 本质 技术 创新 战略 一线云计算布道师历时6年力作 透析云计算本质 简述云计算关键技术 分析主要云服务架构 解剖云计算巨头策略 既有广度又有深度 云计算2 0时代必备 刘黎明 王昭顺 著 ISBN 978 7 121 2318
  • [附源码]Python计算机毕业设计大学生网络安全题库系统Django(程序+LW)

    该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 项目运行 环境配置 Pychram社区版 python3 7 7 Mysql5 7 HBuilderX list pip Navicat11 Django nodejs 项目技
  • MySql 在 Linux中字符集导致乱码问题的解决

    1 查看字符集 show variables like character show variables like char 看看出现的结果 默认的是客户端和服务器都用了latin1 所以会乱码 2 修改 1 首先应该复制配置文件 2 进入
  • jmeter同步定时器

    同步定时器是jmeter中一个比较重要的定时器 同步定时器 相当于一个储蓄池 累积一定的请求 当在规定的时间内达到一定的线程数量 这些线程会在同一个时间点一起并发 可以用来做大数据量的并发请求 验证服务器性能 1 线程中 线程属性 gt 线
  • postgresql(pg)数据库简介

    postgresql pg 数据库简介 1 什么是PostgreSql PostgreSQL是一个功能强大的开源对象关系型数据库系统 他使用和扩展了SQL语言 并结合了许多安全存储和扩展最复杂数据工作负载的功能 PostgreSQL的起源可
  • 深度学习------卷积(conv2D)底层

    卷积是深度学习的核心基础 充分理解卷积计算原理 二维卷积计算底层编程 代码按下列要求完成 lt 1 gt 定义图像image和核函数kernel矩阵 lt 2 gt 打印输出图像image和核函数的维度 lt 3 gt 定义函数comput
  • [转]npm查看一个包的版本信息

    我们npm install安装一个包之后 怎么查看这个包的版本信息呢 过一段时间之后 如何查看这个包最新的版本信息呢 下面将做一个全面的总结 1 查看项目中安装的所有的包 npm list 结果如下 vue2 0 test 0 1 0 C
  • 数字带通传输系统matlab仿真实验,基于MATLAB的数字带通传输系统设计

    基于MATLAB的数字带通传输系统设计 基于MATLAB的数字带通传输系统设计 通信原理课程实验 做了一晚上头脑异常清晰 写下来和大家分享下 程序有点问题 但可以基本实现要求 话不多说 上干货 软件环境是MATLAB2019B 大家如果找到
  • 机器学习(四):基于KNN算法对鸢尾花类别进行分类预测

    文章目录 专栏导读 1 KNN算法原理 2 实战案例 对鸢尾花类别分类预测 2 1确定特征和类别 2 2对特征进行处理 2 3对模型调参 选择最优参数 2 4使用分类模型进行预测 2 5评估模型 检验模型效果 3 完整代码及结果 专栏导读
  • idea导入maven项目问题

    问题产生原因 idea加载maven项目 如果网络不通畅 会在maven仓库中产生一个文件 如下图所示 当网络通畅时 在下载就会因为此文件导致无法下载正确的maven依赖 解决方案 打开maven仓库的根目录 搜索 pom lastUpda
  • 四张图,读懂 BIO、NIO、AIO、多路复用 IO 的区别

    作者 扛麻袋的少年 blog csdn net lzb348110175 article details 98941378 学习之前 我们先来了解一下IO模型 同步阻塞IO Blocking IO 即传统的IO模型 同步非阻塞IO Non
  • 智能工厂的指挥中心:APS排程系统

    从中国制造2025发布开始 我们就算正式进入数字信息化制造时代了 这就代表着很多的企业面临工业化转型 处理传统式的制造形式 版本升级为智能制造形式 APS指的是高级计划与排程均衡供应链与生产过程中各种资源 在不同的供应链与生产瓶颈阶段给出最
  • elasticsearch 脚本排序

    elasticsearch 脚本排序主要用于复杂场景的综合排序 脚本语言有 java painless groovy 目前调研的为painless kibana 脚本创建mapping DELETE ksc metadata PUT ksc
  • nacos支持配置文件热部署(@RefreshScope注解)

    nacos支持配置文件热部署 1 原理 RefreshScope注解实现的原理 是刷新bean 2 定义的变量 在代码中用变量来接 直接在代码块里面使用 示例 1 在配置文件定义一个share config的属性 share config