diff --git a/src/main/java/com/serliunx/ddns/ManagerLite.java b/src/main/java/com/serliunx/ddns/ManagerLite.java
index ed22ce0..d08a60d 100644
--- a/src/main/java/com/serliunx/ddns/ManagerLite.java
+++ b/src/main/java/com/serliunx/ddns/ManagerLite.java
@@ -4,12 +4,8 @@ import com.serliunx.ddns.config.PropertiesConfiguration;
import com.serliunx.ddns.constant.SystemConstants;
import com.serliunx.ddns.core.context.FileInstanceContext;
import com.serliunx.ddns.support.SystemInitializer;
-import com.serliunx.ddns.support.SystemSupport;
import com.serliunx.ddns.support.command.CommandManager;
-import com.serliunx.ddns.support.command.cmd.ExitCommand;
-import com.serliunx.ddns.support.command.cmd.HelpCommand;
-import com.serliunx.ddns.support.command.cmd.IpCommand;
-import org.slf4j.MDC;
+import com.serliunx.ddns.support.command.cmd.*;
import java.util.Scanner;
@@ -21,21 +17,8 @@ import java.util.Scanner;
public final class ManagerLite {
public static void main(String[] args) {
- // 日志参数调整
- beforeInit();
-
// 容器初始化
- SystemInitializer initializer = init();
-
- // 指令注册
- CommandManager commandManager = registerCommand(initializer);
-
- // 指令监听
- handleCommand(commandManager, initializer);
- }
-
- private static void beforeInit() {
- MDC.put("pid", SystemSupport.getPid());
+ init();
}
private static SystemInitializer init() {
@@ -48,14 +31,18 @@ public final class ManagerLite {
return systemInitializer;
}
+ @Deprecated
private static CommandManager registerCommand(SystemInitializer systemInitializer) {
CommandManager commandManager = new CommandManager(systemInitializer);
commandManager.register(new HelpCommand(commandManager));
commandManager.register(new IpCommand(commandManager));
commandManager.register(new ExitCommand(commandManager));
+ commandManager.register(new InstanceCommand(commandManager));
+ commandManager.register(new RefreshCommand(commandManager));
return commandManager;
}
+ @Deprecated
@SuppressWarnings("all")
private static void handleCommand(CommandManager commandManager, SystemInitializer systemInitializer) {
Scanner scanner = new Scanner(System.in);
diff --git a/src/main/java/com/serliunx/ddns/core/instance/AbstractInstance.java b/src/main/java/com/serliunx/ddns/core/instance/AbstractInstance.java
index eefdb1d..e7e7d2b 100644
--- a/src/main/java/com/serliunx/ddns/core/instance/AbstractInstance.java
+++ b/src/main/java/com/serliunx/ddns/core/instance/AbstractInstance.java
@@ -53,6 +53,12 @@ public abstract class AbstractInstance implements Instance {
*/
protected String value;
+ /**
+ * 暂停状态
+ *
默认为非暂停状态
+ */
+ protected volatile boolean pause = false;
+
@Override
public void refresh() {
// 调用子类的初始化逻辑
@@ -61,6 +67,8 @@ public abstract class AbstractInstance implements Instance {
@Override
public void run() {
+ if (isPause()) // 暂停态检查, 已暂停则不继续进行.
+ return;
value = query();
final String ipAddress = NetworkContextHolder.getIpAddress();
try {
@@ -97,18 +105,22 @@ public abstract class AbstractInstance implements Instance {
this.name = name;
}
+ @Override
public String getFatherName() {
return fatherName;
}
+ @Override
public void setFatherName(String fatherName) {
this.fatherName = fatherName;
}
+ @Override
public Long getInterval() {
return interval;
}
+ @Override
public void setInterval(Long interval) {
this.interval = interval;
}
@@ -128,10 +140,21 @@ public abstract class AbstractInstance implements Instance {
this.source = instanceSource;
}
+ @Override
public InstanceSource getSource() {
return source;
}
+ @Override
+ public void setPause(boolean pause) {
+ this.pause = pause;
+ }
+
+ @Override
+ public boolean isPause() {
+ return pause;
+ }
+
/**
* 具体的初始化逻辑
*/
diff --git a/src/main/java/com/serliunx/ddns/core/instance/Instance.java b/src/main/java/com/serliunx/ddns/core/instance/Instance.java
index 3dc1b60..ede56d0 100644
--- a/src/main/java/com/serliunx/ddns/core/instance/Instance.java
+++ b/src/main/java/com/serliunx/ddns/core/instance/Instance.java
@@ -75,4 +75,20 @@ public interface Instance extends Runnable, Refreshable {
* @return 通过校验返回真, 否则返回假
*/
boolean validate();
+
+ /**
+ * 设置实例是否暂停
+ * 暂停之后实力不会进行下一次活动, 不影响正在更新的实力。
+ * 暂停态目前只有一个检查点, 详情见{@link AbstractInstance#run()}
+ * @param pause 暂停状态
+ */
+ void setPause(boolean pause);
+
+ /**
+ * 判断实例是否处于暂停状态
+ * @return 暂停中返回真, 否则返回假
+ */
+ default boolean isPause() {
+ return false;
+ }
}
diff --git a/src/main/java/com/serliunx/ddns/support/SystemInitializer.java b/src/main/java/com/serliunx/ddns/support/SystemInitializer.java
index d74bc42..600922a 100644
--- a/src/main/java/com/serliunx/ddns/support/SystemInitializer.java
+++ b/src/main/java/com/serliunx/ddns/support/SystemInitializer.java
@@ -171,7 +171,6 @@ public final class SystemInitializer implements Refreshable, Clearable {
// 添加进程结束钩子函数
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
- MDC.put("pid", SystemSupport.getPid());
log.info("程序正在关闭中, 可能需要一定时间.");
scheduledThreadPoolExecutor.shutdown();
log.info("已关闭.");
diff --git a/src/main/java/com/serliunx/ddns/support/SystemSupport.java b/src/main/java/com/serliunx/ddns/support/SystemSupport.java
deleted file mode 100644
index 12fef3d..0000000
--- a/src/main/java/com/serliunx/ddns/support/SystemSupport.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.serliunx.ddns.support;
-
-import java.lang.management.ManagementFactory;
-
-/**
- * @author SerLiunx
- * @since 1.0
- */
-public final class SystemSupport {
-
- private static final String PID;
-
- static {
- PID = ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
- }
-
- private SystemSupport(){throw new UnsupportedOperationException();}
-
- public static String getPid() {
- return PID;
- }
-}
diff --git a/src/main/java/com/serliunx/ddns/support/command/cmd/InstanceCommand.java b/src/main/java/com/serliunx/ddns/support/command/cmd/InstanceCommand.java
new file mode 100644
index 0000000..c4eb03a
--- /dev/null
+++ b/src/main/java/com/serliunx/ddns/support/command/cmd/InstanceCommand.java
@@ -0,0 +1,27 @@
+package com.serliunx.ddns.support.command.cmd;
+
+import com.serliunx.ddns.support.command.CommandManager;
+
+import java.util.Arrays;
+
+/**
+ * 实例相关指令
+ * @author SerLiunx
+ * @since 1.0.0
+ */
+public class InstanceCommand extends AbstractCommand {
+
+ public InstanceCommand(Command[] children, CommandManager commandManager) {
+ super("instance", children, commandManager);
+ }
+
+ public InstanceCommand(CommandManager commandManager) {
+ this(null, commandManager);
+ }
+
+ @Override
+ public boolean execute(String[] args) {
+ System.out.println(Arrays.toString(args));
+ return false;
+ }
+}
diff --git a/src/main/java/com/serliunx/ddns/support/command/cmd/RefreshCommand.java b/src/main/java/com/serliunx/ddns/support/command/cmd/RefreshCommand.java
new file mode 100644
index 0000000..fdb0752
--- /dev/null
+++ b/src/main/java/com/serliunx/ddns/support/command/cmd/RefreshCommand.java
@@ -0,0 +1,23 @@
+package com.serliunx.ddns.support.command.cmd;
+
+import com.serliunx.ddns.support.command.CommandManager;
+
+/**
+ * @author SerLiunx
+ * @since 1.0.0
+ */
+public class RefreshCommand extends AbstractCommand {
+
+ public RefreshCommand(Command[] children, CommandManager commandManager) {
+ super("refresh", children, commandManager);
+ }
+
+ public RefreshCommand(CommandManager commandManager) {
+ this(null, commandManager);
+ }
+
+ @Override
+ public boolean execute(String[] args) {
+ return false;
+ }
+}
diff --git a/src/main/java/com/serliunx/ddns/support/log/ProcessIdConverter.java b/src/main/java/com/serliunx/ddns/support/log/ProcessIdConverter.java
new file mode 100644
index 0000000..7f30ad7
--- /dev/null
+++ b/src/main/java/com/serliunx/ddns/support/log/ProcessIdConverter.java
@@ -0,0 +1,20 @@
+package com.serliunx.ddns.support.log;
+
+import ch.qos.logback.classic.pattern.ClassicConverter;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+
+/**
+ * 日志变量%pid(进程id) 转换器
+ * @author SerLiunx
+ * @version 1.0.0
+ * @since 2024/6/15
+ */
+public class ProcessIdConverter extends ClassicConverter {
+
+ private static final String PROCESS_ID = java.lang.management.ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
+
+ @Override
+ public String convert(ILoggingEvent iLoggingEvent) {
+ return PROCESS_ID;
+ }
+}
diff --git a/src/main/java/com/serliunx/ddns/thread/TaskThreadFactory.java b/src/main/java/com/serliunx/ddns/thread/TaskThreadFactory.java
index 39764db..33052d7 100644
--- a/src/main/java/com/serliunx/ddns/thread/TaskThreadFactory.java
+++ b/src/main/java/com/serliunx/ddns/thread/TaskThreadFactory.java
@@ -1,9 +1,7 @@
package com.serliunx.ddns.thread;
import com.serliunx.ddns.support.Assert;
-import com.serliunx.ddns.support.SystemSupport;
import org.jetbrains.annotations.NotNull;
-import org.slf4j.MDC;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
@@ -19,11 +17,7 @@ public class TaskThreadFactory implements ThreadFactory {
@Override
public Thread newThread(@NotNull Runnable r) {
Assert.notNull(r);
- Runnable runnable = () -> {
- MDC.put("pid", SystemSupport.getPid());
- r.run();
- };
- return new Thread(runnable, String.format(getNamePattern(), count.getAndIncrement()));
+ return new Thread(r, String.format(getNamePattern(), count.getAndIncrement()));
}
protected String getNamePattern() {
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
index 7847a8d..88c9b95 100644
--- a/src/main/resources/logback.xml
+++ b/src/main/resources/logback.xml
@@ -1,13 +1,15 @@
+
+
- %d{yyyy年MM月dd日 HH:mm:ss(SSS)} [%X{pid}] [%-15thread] [%level] %logger{16}: %msg%n
+ %boldGreen(%d{yyyy年MM月dd日 HH:mm:ss(SSS)}) %cyan([%pid]) %magenta([%15.15thread]) %highlight([%-6level]) %boldYellow(%-45logger{32}): %highlight(%msg%n)
-
+
\ No newline at end of file