fix: ip更新失败时任务无法重新开始.

This commit is contained in:
2025-02-05 15:07:03 +08:00
parent 7b74b35794
commit 727aa532c6
2 changed files with 13 additions and 4 deletions

View File

@@ -210,7 +210,7 @@ public final class SystemInitializer implements Refreshable, Clearable {
scheduledProvider.whenUpdate(ip -> {
NetworkContextHolder.setIpAddress(ip);
log.info("本机最新公网IP地址 => {}", ip);
log.debug("本机最新公网IP地址 => {}", ip);
});
}

View File

@@ -113,20 +113,29 @@ public class ScheduledProvider extends AbstractProvider implements AutoCloseable
* 提交任务逻辑
*/
private void submitTask() {
task = poolExecutor.scheduleAtFixedRate(this::doAction, 0, timePeriod, TimeUnit.SECONDS);
task = poolExecutor.scheduleAtFixedRate(this, 0, timePeriod, TimeUnit.SECONDS);
}
/**
* 执行逻辑
*/
private void doAction() {
private synchronized void doAction() {
// 打断时, 终止已有的任务. (逻辑上不应该发生)
if (Thread.currentThread().isInterrupted()) {
log.debug("上一个ip更新任务已终止.");
return;
}
InstanceContextHolder.setAdditional("ip-update");
internalCache = internalProvider.get().trim();
String rawValue = internalProvider.get();
if (rawValue == null || rawValue.isEmpty()) {
internalCache = null;
} else {
internalCache = rawValue;
}
if (internalCache != null) {
internalCache = internalCache.trim();
}
if (valueConsumer != null) {
valueConsumer.accept(internalCache);