发布于2026-07-02 阅读(0)
扫一扫,手机访问
先说一个技术场景:不少项目里,全局配置字典变量(比如系统枚举、业务类型码表)都习惯用静态代码块来初始化——类一加载,字典就绪,干净利索。但问题也随之而来:静态代码块只执行一次,运行时想改个字典值?行不通。所以今天聊的核心是:如何用静态代码块把“首次加载”这事做稳当,同时再搭一套动态更新机制,让字典真正“活”起来。

静态代码块适合初始化全局配置字典变量,但本身不支持运行时动态更新;要实现“可配置+可更新”,需结合外部数据源与主动刷新机制。核心在于分清职责:静态代码块管“首次加载”,后续更新靠业务逻辑驱动。
用静态代码块加载一次性的基础字典,确保类加载即就绪,避免重复初始化:
public static final Map或Map> 作为字典容器static{}中从配置文件(如dict.properties)、数据库查询结果或硬编码映射填充数据final修饰,防止引用被意外替换;若需后续修改内容,用ConcurrentHashMap保证线程安全静态代码块只执行一次,真正“动态”要靠外部触发+内存替换:
public static void reload()方法,重新读取配置源并覆盖原Map内容application.yml变化(Spring Boot可用@ConfigurationPropertiesRefresh),或接收HTTP接口调用(如/api/dict/reload)ReentrantLock)或使用AtomicReference,避免读写并发问题脱离硬编码,把字典变量与系统级配置管理打通:
SysDictTypeService.listAll()拉取最新数据ConcurrentHashMap,并注册监听器——当RuoYi后台修改字典类型或数据,通过WebSocket或Redis Pub/Sub通知服务端刷新本地Mapdict_type作Map的key,List作value,便于按类型快速查值静态初始化和动态更新容易混淆职责,导致状态不一致:
init()方法中并做异常兜底
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8