diff --git a/FileModule/src/main/java/org/example/cache/FileCache.java b/FileModule/src/main/java/org/example/cache/FileCache.java index 973f479..a7b3e02 100644 --- a/FileModule/src/main/java/org/example/cache/FileCache.java +++ b/FileModule/src/main/java/org/example/cache/FileCache.java @@ -321,4 +321,9 @@ public class FileCache { } return false; } + + public boolean close(){ + pool.shutdown(); + return pool.isShutdown(); + } } diff --git a/FileModule/src/main/java/org/example/cache/FileCacheManager.java b/FileModule/src/main/java/org/example/cache/FileCacheManager.java index 1127717..636bc32 100644 --- a/FileModule/src/main/java/org/example/cache/FileCacheManager.java +++ b/FileModule/src/main/java/org/example/cache/FileCacheManager.java @@ -23,7 +23,6 @@ import static java.lang.Thread.sleep; */ public class FileCacheManager { - private Logger logger = LoggerFactory.getLogger(FileCacheManager.class); private final List fileCaches; private final ConcurrentHashMap fileCacheMap; @@ -134,4 +133,11 @@ public class FileCacheManager { } } + public boolean close(){ + watchPool.shutdown(); + autoSyncer.shutdown(); + fileCaches.forEach(FileCache::close); + return watchPool.isShutdown()&&autoSyncer.isShutdown(); + } + } diff --git a/FileModule/src/main/java/org/example/init/FileCacheManagerInit.java b/FileModule/src/main/java/org/example/init/FileCacheManagerInit.java index 4bdd5d9..eaab706 100644 --- a/FileModule/src/main/java/org/example/init/FileCacheManagerInit.java +++ b/FileModule/src/main/java/org/example/init/FileCacheManagerInit.java @@ -1,6 +1,8 @@ package org.example.init; import org.example.cache.FileCacheManagerInstance; +import org.example.log.FileModuleLogger; +import org.slf4j.Logger; /** * @author Genius @@ -8,9 +10,23 @@ import org.example.cache.FileCacheManagerInstance; **/ public class FileCacheManagerInit extends CommonInitMachine{ + public FileCacheManagerInit() { + super(FileModuleLogger.logger); + } + @Override public boolean init() { - FileCacheManagerInstance.getInstance().start(); - return true; + try { + FileCacheManagerInstance.getInstance().start(); + return success(); + }catch (Exception e){ + return fail(e.getMessage()); + } + } + + @Override + public void shutdown() { + super.shutdown(); + FileCacheManagerInstance.getInstance().close(); } } diff --git a/FileModule/src/main/java/org/example/init/FileModuleInitMachine.java b/FileModule/src/main/java/org/example/init/FileModuleInitMachine.java new file mode 100644 index 0000000..11388be --- /dev/null +++ b/FileModule/src/main/java/org/example/init/FileModuleInitMachine.java @@ -0,0 +1,21 @@ +package org.example.init; + +import org.example.log.FileModuleLogger; +import org.slf4j.Logger; + +import java.util.List; + +/** + * @author Genius + * @date 2023/07/22 18:47 + **/ +public class FileModuleInitMachine extends ModuleInitMachine{ + + public FileModuleInitMachine() { + super(List.of( + new ModuleSrcConfigFileInit(), + new FileCacheManagerInit() + ), "FileModule", FileModuleLogger.logger); + } + +} diff --git a/FileModule/src/main/java/org/example/init/ModuleSrcConfigFileInit.java b/FileModule/src/main/java/org/example/init/ModuleSrcConfigFileInit.java index ad2ba7d..0a809ba 100644 --- a/FileModule/src/main/java/org/example/init/ModuleSrcConfigFileInit.java +++ b/FileModule/src/main/java/org/example/init/ModuleSrcConfigFileInit.java @@ -1,5 +1,6 @@ package org.example.init; +import org.example.log.FileModuleLogger; import org.example.pojo.configfile.ModuleSrcConfigFile; import org.example.util.FileUtil; import org.example.util.JsonFileUtil; @@ -17,35 +18,34 @@ import java.util.Map; public class ModuleSrcConfigFileInit extends CommonInitMachine { - private Logger logger = LoggerFactory.getLogger(ModuleSrcConfigFileInit.class); - ModuleSrcConfigFile moduleSrcConfigFile; + public ModuleSrcConfigFileInit() { - moduleSrcConfigFile = new ModuleSrcConfigFile(); + super(FileModuleLogger.logger); + moduleSrcConfigFile = new ModuleSrcConfigFile(); } + @Override public boolean init() { Path dir = Paths.get(moduleSrcConfigFile.getFilePath()); if (!createConfigDirectory(dir)) { - return false; + return fail("创建Config目录失败"); } if (!createConfigFile(dir)) { - return false; + return fail("创建Config文件失败"); } if (!createModuleDirectory()) { - return false; + return fail("创建模块文件夹失败"); } - return true; + return success(); } private boolean createConfigDirectory(Path dir) { try { if (!Files.exists(dir)) { Files.createDirectory(dir); - logger.info("创建 config 文件夹成功 √ "); } }catch (Exception e) { - logger.error("创建配置文件夹失败"); return false; } return true; @@ -56,10 +56,8 @@ public class ModuleSrcConfigFileInit extends CommonInitMachine { try { if (!Files.exists(path)) { JsonFileUtil.writeJsonFile(path.toString(),moduleSrcConfigFile.packageConfig()); - logger.info("创建 {} 配置文件成功 √",moduleSrcConfigFile.getFileName()); } }catch (Exception e) { - logger.error("创建配置文件失败"); return false; } return true; @@ -76,10 +74,8 @@ public class ModuleSrcConfigFileInit extends CommonInitMachine { try { if (!FileUtil.isFileExist(src.getSrc())) { Files.createDirectory(Path.of(src.getSrc())); - logger.info("创建 {} 模块文件夹成功 √ ",src.getSrc()); } }catch (Exception e) { - logger.error("创建 {} 模块文件夹失败 ×",src.getSrc()); return false; } } diff --git a/HotModule/src/main/java/org/example/guard/HotModuleGuard.java b/HotModule/src/main/java/org/example/guard/HotModuleGuard.java index 9a7d7bc..9ff03e2 100644 --- a/HotModule/src/main/java/org/example/guard/HotModuleGuard.java +++ b/HotModule/src/main/java/org/example/guard/HotModuleGuard.java @@ -52,9 +52,10 @@ public class HotModuleGuard { } } - public void end(){ + public boolean close(){ hotModuleGuardPool.shutdown(); runningGuards.clear(); + return hotModuleGuardPool.isShutdown(); } public boolean addGuard(String platform,boolean isHotModule){ diff --git a/HotModule/src/main/java/org/example/init/HotModuleGuardInitMachine.java b/HotModule/src/main/java/org/example/init/HotModuleGuardInitMachine.java index 2403124..7e1f5c5 100644 --- a/HotModule/src/main/java/org/example/init/HotModuleGuardInitMachine.java +++ b/HotModule/src/main/java/org/example/init/HotModuleGuardInitMachine.java @@ -7,6 +7,7 @@ import org.example.cache.FileCacheManagerInstance; import org.example.config.HotModuleConfig; import org.example.config.HotModuleSetting; import org.example.core.control.HotModuleLoadTask; +import org.example.guard.HotModuleGuard; import org.example.guard.HotModuleGuardInstance; import org.example.guard.Guard; import org.example.log.HotModuleLogger; @@ -77,4 +78,9 @@ public class HotModuleGuardInitMachine extends CommonInitMachine{ return success(); } + @Override + public void shutdown() { + super.shutdown(); + HotModuleGuardInstance.getInstance().close(); + } } diff --git a/HotModule/src/main/java/org/example/init/HotModuleInitMachine.java b/HotModule/src/main/java/org/example/init/HotModuleInitMachine.java index cbc3777..1a1a0d1 100644 --- a/HotModule/src/main/java/org/example/init/HotModuleInitMachine.java +++ b/HotModule/src/main/java/org/example/init/HotModuleInitMachine.java @@ -14,8 +14,6 @@ import java.util.List; */ public class HotModuleInitMachine extends ModuleInitMachine{ - - public HotModuleInitMachine() { super( List.of(new HotModuleConfigInitMachine(),new HotModuleGuardInitMachine()), @@ -23,16 +21,4 @@ public class HotModuleInitMachine extends ModuleInitMachine{ HotModuleLogger.logger ); } - - @Override - public boolean init() { - return initLogger(()->{ - for (InitMachine initMachine : this.getInitMachines()) { - if(!initMachine.init()){ - return fail(); - } - } - return success(); - }); - } } diff --git a/common/src/main/java/org/example/init/CommonInitMachine.java b/common/src/main/java/org/example/init/CommonInitMachine.java index 76174c2..3aaaa07 100644 --- a/common/src/main/java/org/example/init/CommonInitMachine.java +++ b/common/src/main/java/org/example/init/CommonInitMachine.java @@ -8,6 +8,8 @@ package org.example.init; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.function.Supplier; + /** * 模块中的小模块初始化抽象类 */ @@ -60,4 +62,13 @@ public abstract class CommonInitMachine implements ComponentInitMachine{ successLog(str); return true; } + + @Override + public void shutdown(){ + shutdownLog(); + } + + private void shutdownLog(){ + logger.info("[🆖] {} close success.",this.getClass().getName()); + } } diff --git a/common/src/main/java/org/example/init/InitMachine.java b/common/src/main/java/org/example/init/InitMachine.java index 7f5cb17..f35090e 100644 --- a/common/src/main/java/org/example/init/InitMachine.java +++ b/common/src/main/java/org/example/init/InitMachine.java @@ -12,4 +12,6 @@ import org.example.log.ResultLogger; public interface InitMachine extends ResultLogger { boolean init(); + + void shutdown(); } diff --git a/common/src/main/java/org/example/init/ModuleInitMachine.java b/common/src/main/java/org/example/init/ModuleInitMachine.java index 3343771..c064d4e 100644 --- a/common/src/main/java/org/example/init/ModuleInitMachine.java +++ b/common/src/main/java/org/example/init/ModuleInitMachine.java @@ -23,7 +23,19 @@ public abstract class ModuleInitMachine extends CommonInitMachine{ private String moduleName; - public ModuleInitMachine(List initMachines,String moduleName) { + @Override + public boolean init() { + return initLogger(()->{ + for (InitMachine initMachine : this.getInitMachines()) { + if(!initMachine.init()){ + return fail(); + } + } + return success(); + }); + } + + public ModuleInitMachine(List initMachines, String moduleName) { this.initMachines = initMachines; this.moduleName = moduleName; } @@ -87,4 +99,13 @@ public abstract class ModuleInitMachine extends CommonInitMachine{ successLog(); return true; } + + @Override + public void shutdown() { + logger.info("👇 <{}> is shutting down , {} plugins need to shut down...",moduleName,initMachines.size()); + initMachines.forEach( + InitMachine::shutdown + ); + logger.info("👆 <{}> Completing the shutdown of all plugins!",moduleName); + } } diff --git a/common/src/main/java/org/example/log/HotModuleLogger.java b/common/src/main/java/org/example/log/HotModuleLogger.java index 0fd431d..c660802 100644 --- a/common/src/main/java/org/example/log/HotModuleLogger.java +++ b/common/src/main/java/org/example/log/HotModuleLogger.java @@ -10,5 +10,5 @@ import org.slf4j.LoggerFactory; * @date 2023/07/19 02:55 **/ public class HotModuleLogger { - public static final Logger logger = LoggerFactory.getLogger("HotModuleLogger"); + public static final Logger logger = LoggerFactory.getLogger("HotModuleLogger "); } diff --git a/common/src/main/java/org/example/log/SystemLogger.java b/common/src/main/java/org/example/log/SystemLogger.java new file mode 100644 index 0000000..a000648 --- /dev/null +++ b/common/src/main/java/org/example/log/SystemLogger.java @@ -0,0 +1,14 @@ +package org.example.log; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Genius + * @date 2023/07/22 17:53 + **/ +public class SystemLogger { + + public static final Logger logger = LoggerFactory.getLogger("ChopperBotLogger"); + +} diff --git a/console/src/main/java/org/example/ConsoleApplication.java b/console/src/main/java/org/example/ConsoleApplication.java index 3fac98f..d8ec5ef 100644 --- a/console/src/main/java/org/example/ConsoleApplication.java +++ b/console/src/main/java/org/example/ConsoleApplication.java @@ -6,8 +6,10 @@ import org.example.init.FileCacheManagerInit; import org.example.init.HotModuleInitMachine; import org.example.init.InitWorld; import org.example.init.ModuleSrcConfigFileInit; +import org.springframework.boot.ExitCodeGenerator; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; import java.util.List; import java.util.concurrent.ConcurrentLinkedQueue; @@ -21,19 +23,7 @@ import java.util.concurrent.ConcurrentLinkedQueue; public class ConsoleApplication { public static void main(String[] args) { - if (Init()) { - SpringApplication.run(ConsoleApplication.class, args); - } + SpringApplication.run(ConsoleApplication.class, args); } - public static boolean Init(){ - return InitWorld.getInstance() - .setInitMachines( - List.of( - new ModuleSrcConfigFileInit(), - new FileCacheManagerInit(), - new HotModuleInitMachine() - ) - ).start(); - } } diff --git a/console/src/main/java/org/example/init/InitWorld.java b/console/src/main/java/org/example/init/InitWorld.java index 0021d90..fd28e96 100644 --- a/console/src/main/java/org/example/init/InitWorld.java +++ b/console/src/main/java/org/example/init/InitWorld.java @@ -2,7 +2,11 @@ package org.example.init; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.stereotype.Component; +import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.List; @@ -11,36 +15,30 @@ import java.util.List; * @date 2023/04/20 19:36 **/ +@Component //初始化整个项目,各个模块配置文件 public class InitWorld { - private Logger logger = LoggerFactory.getLogger(InitWorld.class); - private static volatile InitWorld initWorld = new InitWorld(); - private List initMachines; + private ConfigurableApplicationContext ctx; - private InitWorld(){ + private SystemInitMachine world; + + private InitWorld(ConfigurableApplicationContext ctx) { + this.ctx = ctx; + this.world = new SystemInitMachine(); } - public InitWorld setInitMachines(List initMachines){ - this.initMachines = initMachines; - return this; - } - - public static InitWorld getInstance(){ - return initWorld; - } - - public boolean start(){ - if(initWorld == null){ - logger.error("已经初始化过了"); - return true; + @PostConstruct + private void init(){ + boolean isInit = world.init(); + if(!isInit){ + close(); } - for(InitMachine initMachine : initMachines){ - if(!initMachine.init()){ - logger.error("{}初始化失败!!", initMachine.getClass().getName()); - return false; - } - } - return true; + } + + private void close(){ + world.shutdown(); + int exit = SpringApplication.exit(ctx, () -> 0); + System.exit(exit); } } diff --git a/console/src/main/java/org/example/init/SystemInitMachine.java b/console/src/main/java/org/example/init/SystemInitMachine.java new file mode 100644 index 0000000..d119ba4 --- /dev/null +++ b/console/src/main/java/org/example/init/SystemInitMachine.java @@ -0,0 +1,49 @@ +package org.example.init; + +import org.example.log.SystemLogger; +import org.slf4j.Logger; + +import java.util.List; +import java.util.function.Supplier; + +/** + * @author Genius + * @date 2023/07/22 17:52 + **/ +public class SystemInitMachine extends ModuleInitMachine{ + + private static final String githubUrl = "https://github.com/969025903/ChopperBot"; + public SystemInitMachine() { + super(List.of( + new FileModuleInitMachine(), + new HotModuleInitMachine() + ), "ChopperBot", SystemLogger.logger); + } + + + @Override + protected boolean initLogger(Supplier init) { + logger.info("🌏 <{}> Wake up,Find {} module need to init,please wait.....","ChopperBot",getInitMachines().size()); + return init.get(); + } + + @Override + public void shutdown() { + logger.info("🌏 <{}> is shutting down,{} modules need to be closed,please wait.....","ChopperBot",getInitMachines().size()); + this.getInitMachines().forEach( + InitMachine::shutdown + ); + logger.info("🌏 <{}> all modules have been closed. Good Bye~🤗","ChopperBot"); + } + + @Override + public void successLog() { + successLog(String.format("🤖 <%s> Already Start,Enjoy it.You can goto the %s to support us,THX 😘! ","ChopperBot",githubUrl)); + } + + @Override + public void failLog(){ + failLog(String.format("👻 <%s> Fail to Start,Please ensure that your module is correct or you can go to the " + + "%s write your error info 😥 ! ","ChopperBot",githubUrl)); + } +}