本文的前提:Nocas 配置中心环境搭建完成。
本文的内容:以监听 Nacos 配置中的 logLevel 字段的变化实现日志级别的动态刷新为例,介绍如何实现配置变化的监听。
配置监听器:
需要配置监听的 key、需要处理的业务等;
@Slf4j
@Component
public class LoggingLevelRefresher extends AbstractConfigChangeListener {
// 需要监听的key
private static final String KEY = "logLevel";
@Value("${logLevel}")
private String logLevel;
@Resource
private LoggingSystem loggingSystem;
@PostConstruct
public void init() {
// 首次启动加载配置中
loggingSystem.setLogLevel("com.fosafer", LogLevel.valueOf(logLevel));
}
/**
* 当 key 值发生改变时,执行该方法,改变日志级别
* @param event
*/
@Override
public void receiveConfigChange(ConfigChangeEvent event) {
String logLevel = Optional.ofNullable(event.getChangeItem(KEY))
.map(ConfigChangeItem::getNewValue).orElse("INFO");
// loggingSystem.setLogLevel("ROOT", LogLevel.valueOf(logLevel));
loggingSystem.setLogLevel("com.fosafer", LogLevel.valueOf(logLevel));
log.error("[日志级别改动] {}", logLevel);
}
}
添加监听器至 Nacos 服务
@Slf4j
@Configuration
public class NacosConfigListenerManager {
@Resource
NacosConfigManager nacosConfigManager;
@Resource
NacosConfigProperties configProperties;
@Resource
private LoggingLevelRefresher loggingLevelRefresher;
@PostConstruct
public void init() {
try {
for (NacosConfigProperties.Config extensionConfig : configProperties.getExtensionConfigs()) {
ConfigService configService = nacosConfigManager.getConfigService();
configService.addListener(extensionConfig.getDataId(), configProperties.getGroup(), loggingLevelRefresher);
}
} catch (NacosException e) {
log.error("nacos 监听异常:", e);
}
}
}