change: 代码注释、调整代码.

This commit is contained in:
2024-12-25 21:48:01 +08:00
parent c2b71736cc
commit 05b637b9f1
6 changed files with 58 additions and 7 deletions

View File

@@ -1,5 +1,6 @@
package com.serliunx.ddns.config;
import com.serliunx.ddns.constant.ConfigurationKeys;
import com.serliunx.ddns.support.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

View File

@@ -1,4 +1,4 @@
package com.serliunx.ddns.config;
package com.serliunx.ddns.constant;
/**
* 配置文件键常量信息

View File

@@ -16,7 +16,7 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import static com.serliunx.ddns.config.ConfigurationKeys.KEY_ALIYUN_ENDPOINT;
import static com.serliunx.ddns.constant.ConfigurationKeys.KEY_ALIYUN_ENDPOINT;
import static com.serliunx.ddns.constant.SystemConstants.XML_ROOT_INSTANCE_NAME;
/**

View File

@@ -5,6 +5,7 @@ import org.slf4j.LoggerFactory;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@@ -24,16 +25,28 @@ public final class NetworkContextHolder {
// 外网IP地址获取
private static final Integer IP_CONTEXT_TIME_OUT = 5;
private static volatile String IP_ADDRESS;
/**
* 失败计数
* <p>
* 失败次数过多后, 会影响
*/
private static final AtomicInteger FAILED_COUNTS = new AtomicInteger();
// private-ctor
private NetworkContextHolder() {throw new UnsupportedOperationException();}
/**
* 尝试设置IP地址
*
* @param i 新的ip地址, 为空时设置会失败
*/
public static void setIpAddress(String i) {
if (i == null
|| i.isEmpty()) {
log.error("IP 地址不能为空!");
FAILED_COUNTS.incrementAndGet();
return;
}
try {
IP_LOCK.lock();
IP_ADDRESS = i;
@@ -41,11 +54,23 @@ public final class NetworkContextHolder {
IP_CONTEXT_WAIT_LATCH.countDown();
}
} finally {
FAILED_COUNTS.set(0);
IP_LOCK.unlock();
}
}
/**
* 获取所缓存的ip的地址
* <p>
* 设置失败次数过多时将忽略已保存的缓存值防止多次将旧IP重复更新.
*
* @return ip地址
*/
public static String getIpAddress() {
if (FAILED_COUNTS.get() > 10) {
log.warn("更新失败次数过多, 不在返回IP地址直到下次成功更新!");
return null;
}
if (IP_ADDRESS != null) {
return IP_ADDRESS;
}

View File

@@ -1,7 +1,7 @@
package com.serliunx.ddns.support;
import com.serliunx.ddns.config.Configuration;
import com.serliunx.ddns.config.ConfigurationKeys;
import com.serliunx.ddns.constant.ConfigurationKeys;
import com.serliunx.ddns.constant.IpProviderType;
import com.serliunx.ddns.constant.SystemConstants;
import com.serliunx.ddns.core.Clearable;
@@ -27,8 +27,8 @@ import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import static com.serliunx.ddns.config.ConfigurationKeys.KEY_TASK_REFRESH_INTERVAL_IP;
import static com.serliunx.ddns.config.ConfigurationKeys.KEY_THREAD_POOL_CORE_SIZE;
import static com.serliunx.ddns.constant.ConfigurationKeys.KEY_TASK_REFRESH_INTERVAL_IP;
import static com.serliunx.ddns.constant.ConfigurationKeys.KEY_THREAD_POOL_CORE_SIZE;
/**
* 系统初始化
@@ -115,11 +115,17 @@ public final class SystemInitializer implements Refreshable, Clearable {
return instances;
}
/**
* 加载实例(不同的容器加载时机不同)
*/
private void loadInstances() {
instances = instanceContext.getInstances();
log.info("载入 {} 个实例.", instances.size());
}
/**
* 资源释放
*/
@SuppressWarnings("SameParameterValue")
private void releaseResource(String resourceName) {
ClassLoader classLoader = SystemConstants.class.getClassLoader();
@@ -146,6 +152,9 @@ public final class SystemInitializer implements Refreshable, Clearable {
}
}
/**
* 运行实例
*/
private void runInstances() {
Assert.notNull(scheduledThreadPoolExecutor);
Assert.notNull(instances);
@@ -164,6 +173,11 @@ public final class SystemInitializer implements Refreshable, Clearable {
}
}
/**
* 初始化线程池
*
* @param coreSize 线程池核心线程数量
*/
private void initThreadPool(int coreSize) {
Assert.isLargerThan(coreSize, 1);
scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(coreSize, ThreadFactoryBuilder.builder()
@@ -182,6 +196,9 @@ public final class SystemInitializer implements Refreshable, Clearable {
}, "DDNS-ShutDownHook"));
}
/**
* 初始化定时获取IP地址的任务
*/
private void initIpTask() {
scheduledProvider = new ScheduledProvider(getInternalProvider(),
configuration.getLong(KEY_TASK_REFRESH_INTERVAL_IP, 300L));
@@ -192,11 +209,19 @@ public final class SystemInitializer implements Refreshable, Clearable {
});
}
/**
* 获取内置的IP供应器获取IP地址的方式
* <p>
* 根据配置文件中的定义{@link ConfigurationKeys#KEY_IP_PROVIDER_TYPE}, 默认为{@link com.serliunx.ddns.support.ipprovider.IpApiProvider}
*/
private Provider getInternalProvider() {
return configuration.getEnum(IpProviderType.class, ConfigurationKeys.KEY_IP_PROVIDER_TYPE,
IpProviderType.IP_API).getProvider();
}
/**
* 关闭线程池逻辑
*/
private void checkAndCloseSafely() {
if (scheduledThreadPoolExecutor == null)
return;

View File

@@ -1,7 +1,7 @@
package com.serliunx.ddns.support.okhttp;
import com.serliunx.ddns.config.Configuration;
import com.serliunx.ddns.config.ConfigurationKeys;
import com.serliunx.ddns.constant.ConfigurationKeys;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;