SpringBoot--手写组件动态更新@Value的值

原文网址:SpringBoot--手写组件动态更新@Value的值_IT利刃出鞘的博客-CSDN博客

简介

本文手写组件,动态更新SpringBoot里@Value的值(无需重启服务)。

不是可以用@RefreshScope吗?为什么要手写组件?

动态更新配置属性其实有四种方式:

  1. @RefreshScope
    1. 详见:此文
  2. 用类表示配置。
    1. 详见:此文
  3. ApplicationContext
    1. 方法:ApplicationContextHolder.getContext().getEnvironment().getRequiredProperty(key);
    2. ApplicationContextHolder见:SpringBoot-静态获得Bean的工具类 - 自学精灵
  4. 本文组件。

这四种方式的对比:

|--------------|---------------------------------------------------------------------------------------------------|---------------------|------------------------|----------|
| 比较项 | @RefreshScope | 用类表示配置 | ApplicationContext | 本文组件 |
| 启动时检查空值 | 是 (没配置会报错,能及时发现问题) | 否 (没配置不报错,无法及时发现问题) | 否 | 是 |
| 是否有失效的情况 | 是 详见: 这里。 | 否 | 否 | 否 |
| 易用性 | ☆☆☆☆☆ | ☆☆☆ | ☆☆ | ☆☆☆☆☆ |

从上边可以发现,本文组件是最完美的!

结果展示

Controller代码

java 复制代码
package com.knife.example.business.product.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Api(tags = "商品")
@RestController
@RequestMapping("product")
public class ProductController {
    @Value("${key1:aa}")
    private String key1;

    @ApiOperation("测试")
    @GetMapping("detail")
    public String detail() {
        return key1;
    }
}

测试

访问:http://localhost:8080/doc.html

修改Nacos,将key1改为bb,不重启应用。

再次请求:(可见,已经自动更新啦)

代码

上边是文章的部分内容,为便于维护,全文已转移到此地址:手写组件动态更新@Value的值 - 自学精灵

相关推荐
金銀銅鐵8 小时前
带您看懂字节码指令(一):一帧里有什么
java·后端·ai编程
nice_lcj52010 小时前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索
java·spring boot·embedding·向量数据库·rag·spring ai·ai应用开发
学长毕设12 小时前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
聪明的笨猪猪12 小时前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
学长毕设13 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
SL_staff15 小时前
私有化低代码:面向强监管行业的可控数字化实践
java·低代码
三翼鸟数字化技术团队15 小时前
高性能存储引擎RocksDB:原理与Java生态实践
java
AI开源软件16 小时前
SpringBoot3+AI Agent 智能报销:怎样把对话接进现有财务审批系统
spring boot·ai agent·人工确认·ruoyi office·agentos·智能报销·财务审批
SL_staff16 小时前
JVS-APS有限产能建模的七个刚性支点:面向产线真实约束的技术实现解析
java·开源·全栈
特立独行的猫A16 小时前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比
java·后端·python