diff --git a/CreeperModule/src/main/java/org/example/init/CreeperConfigInitMachine.java b/CreeperModule/src/main/java/org/example/init/CreeperConfigInitMachine.java index a4567d7..e00a602 100644 --- a/CreeperModule/src/main/java/org/example/init/CreeperConfigInitMachine.java +++ b/CreeperModule/src/main/java/org/example/init/CreeperConfigInitMachine.java @@ -6,7 +6,6 @@ import org.example.constpool.PluginName; import org.example.log.ChopperLogFactory; import org.example.log.LoggerType; import org.example.util.FileUtil; -import org.slf4j.Logger; import java.io.IOException; import java.nio.file.Files; diff --git a/CreeperModule/src/main/java/org/example/init/TaskCenterInitMachine.java b/CreeperModule/src/main/java/org/example/init/TaskCenterInitMachine.java index 018beb4..1e1039c 100644 --- a/CreeperModule/src/main/java/org/example/init/TaskCenterInitMachine.java +++ b/CreeperModule/src/main/java/org/example/init/TaskCenterInitMachine.java @@ -1,19 +1,20 @@ package org.example.init; +import org.example.constpool.ConstPool; import org.example.constpool.PluginName; import org.example.log.ChopperLogFactory; import org.example.log.LoggerType; +import org.example.plugin.Plugin; import org.example.taskcenter.TaskCenter; -import org.example.thread.oddjob.OddJobBoy; -import org.slf4j.Logger; import java.util.List; -import java.util.Objects; /** * @author Genius * @date 2023/07/28 23:49 **/ + +@Plugin(moduleName = ConstPool.CREEPER,pluginName = PluginName.TASK_CENTER_PLUGIN,needPlugin = {PluginName.FILE_CACHE_PLUGIN}) public class TaskCenterInitMachine extends CommonInitMachine{ public TaskCenterInitMachine() { @@ -24,20 +25,16 @@ public class TaskCenterInitMachine extends CommonInitMachine{ @Override public boolean init() { - if(checkNeedPlugin()){ - try { - TaskCenter center = TaskCenter.center(); - if(center==null){ - return fail(); - } - center.guardian(); - }catch (Exception e){ + try { + TaskCenter center = TaskCenter.center(); + if(center==null){ return fail(); } - registerPlugin(); - return success(); + center.guardian(); + }catch (Exception e){ + return fail(); } - return false; + return success(); } @Override diff --git a/CreeperModule/src/main/java/org/example/init/module/CreeperModuleInitMachine.java b/CreeperModule/src/main/java/org/example/init/module/CreeperModuleInitMachine.java index c46fc4a..8658a9d 100644 --- a/CreeperModule/src/main/java/org/example/init/module/CreeperModuleInitMachine.java +++ b/CreeperModule/src/main/java/org/example/init/module/CreeperModuleInitMachine.java @@ -5,8 +5,6 @@ import org.example.init.ModuleInitMachine; import org.example.init.TaskCenterInitMachine; import org.example.log.ChopperLogFactory; import org.example.log.LoggerType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.List; diff --git a/CreeperModule/src/main/java/org/example/taskcenter/TaskCenter.java b/CreeperModule/src/main/java/org/example/taskcenter/TaskCenter.java index 1fd4ed4..22dcbab 100644 --- a/CreeperModule/src/main/java/org/example/taskcenter/TaskCenter.java +++ b/CreeperModule/src/main/java/org/example/taskcenter/TaskCenter.java @@ -2,7 +2,6 @@ package org.example.taskcenter; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import lombok.Data; import org.example.cache.FileCache; import org.example.cache.FileCacheManagerInstance; import org.example.config.CreeperConfigFile; @@ -17,8 +16,6 @@ import org.example.taskcenter.request.ReptileRequest; import org.example.taskcenter.task.ReptileTask; import org.example.thread.ChopperBotGuardianTask; import org.example.util.ConfigFileUtil; -import org.example.util.FileUtil; -import org.example.util.JsonFileUtil; import java.util.ArrayList; import java.util.Map; @@ -36,7 +33,7 @@ import java.util.concurrent.locks.ReentrantLock; * 2,记录正在运行的爬虫任务 * 3,未完成的爬虫任务修复 */ -public class TaskCenter implements ChopperBotGuardianTask { +public class TaskCenter implements ChopperBotGuardianTask{ private long waitingQueueTime; //等待队列时间 @@ -208,4 +205,5 @@ public class TaskCenter implements ChopperBotGuardianTask { public void threadTask() { this.work(); } + } diff --git a/FileModule/src/main/java/org/example/init/ConfigInitMachine.java b/FileModule/src/main/java/org/example/init/ConfigInitMachine.java index c35a7ee..e237aa6 100644 --- a/FileModule/src/main/java/org/example/init/ConfigInitMachine.java +++ b/FileModule/src/main/java/org/example/init/ConfigInitMachine.java @@ -1,16 +1,10 @@ package org.example.init; import org.example.bean.ConfigFile; -import org.example.cache.FileCache; -import org.example.cache.FileCacheManagerInstance; -import org.example.exception.FileCacheException; import org.example.util.ConfigFileUtil; -import org.example.util.FileUtil; -import org.example.util.JsonFileUtil; import org.slf4j.Logger; import java.nio.file.Paths; -import java.util.Map; /** * @author Genius @@ -33,7 +27,6 @@ public abstract class ConfigInitMachine extends CommonInit @Override public boolean init() { if (ConfigFileUtil.createConfigFile(filePath,configFile,logger,pluginName)) { - registerPlugin(); return true; } return false; diff --git a/FileModule/src/main/java/org/example/init/FileCacheManagerInitMachine.java b/FileModule/src/main/java/org/example/init/FileCacheManagerInitMachine.java index dfc23c1..9279fc9 100644 --- a/FileModule/src/main/java/org/example/init/FileCacheManagerInitMachine.java +++ b/FileModule/src/main/java/org/example/init/FileCacheManagerInitMachine.java @@ -19,7 +19,6 @@ public class FileCacheManagerInitMachine extends CommonInitMachine{ public boolean init() { try { FileCacheManagerInstance.getInstance().start(); - registerPlugin(); return success(); }catch (Exception e){ return fail(e.getMessage()); diff --git a/FileModule/src/main/java/org/example/pojo/configfile/ModuleSrcConfigFile.java b/FileModule/src/main/java/org/example/pojo/configfile/ModuleSrcConfigFile.java index bfe5f2d..65d7f35 100644 --- a/FileModule/src/main/java/org/example/pojo/configfile/ModuleSrcConfigFile.java +++ b/FileModule/src/main/java/org/example/pojo/configfile/ModuleSrcConfigFile.java @@ -26,7 +26,8 @@ public class ModuleSrcConfigFile extends ConfigFile> { ConstPool.CREEPER, "./config/"+ConstPool.CREEPER, ConstPool.SECTION_WORK, "./config/"+ConstPool.SECTION_WORK, ConstPool.HOT, "./config/"+ConstPool.HOT, - ConstPool.PUBLISH, "./config/"+ConstPool.PUBLISH)), + ConstPool.PUBLISH, "./config/"+ConstPool.PUBLISH), + "plugin",Map.of()), FileType.CHOPPER_BOT); } diff --git a/HotModule/src/main/java/org/example/core/HotModuleDataCenter.java b/HotModule/src/main/java/org/example/core/HotModuleDataCenter.java index 0dfad09..9350555 100644 --- a/HotModule/src/main/java/org/example/core/HotModuleDataCenter.java +++ b/HotModule/src/main/java/org/example/core/HotModuleDataCenter.java @@ -7,10 +7,8 @@ import org.example.bean.Live; import org.example.bean.HotModule; import org.example.bean.hotmodule.HotModuleList; import org.example.constpool.ConstPool; -import org.example.init.CommonInitMachine; import org.example.log.ChopperLogFactory; import org.example.log.LoggerType; -import org.example.taskcenter.request.ReptileRequest; import org.example.thread.oddjob.OddJobBoy; import org.example.util.TimeUtil; diff --git a/HotModule/src/main/java/org/example/init/HeatRecommendationInitMachine.java b/HotModule/src/main/java/org/example/init/HeatRecommendationInitMachine.java index 48d013f..a3d1dda 100644 --- a/HotModule/src/main/java/org/example/init/HeatRecommendationInitMachine.java +++ b/HotModule/src/main/java/org/example/init/HeatRecommendationInitMachine.java @@ -4,7 +4,6 @@ import org.example.constpool.PluginName; import org.example.core.recommend.HeatRecommendation; import org.example.log.ChopperLogFactory; import org.example.log.LoggerType; -import org.slf4j.Logger; import java.util.List; @@ -25,16 +24,14 @@ public class HeatRecommendationInitMachine extends CommonInitMachine{ @Override public boolean init() { - if(checkNeedPlugin()){ - try { - heatRecommendation = new HeatRecommendation(); - }catch (Exception e){ - return fail(); - } - registerPlugin(); - return success(); + + try { + heatRecommendation = new HeatRecommendation(); + }catch (Exception e){ + return fail(); } - return false; + + return success(); } @Override diff --git a/HotModule/src/main/java/org/example/init/HotGuardInitMachine.java b/HotModule/src/main/java/org/example/init/HotGuardInitMachine.java index 2d1eb2f..ae36de3 100644 --- a/HotModule/src/main/java/org/example/init/HotGuardInitMachine.java +++ b/HotModule/src/main/java/org/example/init/HotGuardInitMachine.java @@ -82,16 +82,13 @@ public class HotGuardInitMachine extends CommonInitMachine{ @Override public boolean init() { - if(checkNeedPlugin()){ - try { - envInit(); - } catch (Exception e) { - return fail(e.getMessage()); - } - registerPlugin(); - return success(); + try { + envInit(); + } catch (Exception e) { + return fail(e.getMessage()); } - return false; + + return success(); } @Override diff --git a/common/pom.xml b/common/pom.xml index c1dc023..938adad 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -38,6 +38,10 @@ org.projectlombok lombok - + + org.reflections + reflections + 0.9.11 + diff --git a/common/src/main/java/org/example/bean/Plugin.java b/common/src/main/java/org/example/bean/Plugin.java new file mode 100644 index 0000000..a6fd97e --- /dev/null +++ b/common/src/main/java/org/example/bean/Plugin.java @@ -0,0 +1,21 @@ +package org.example.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import org.example.init.InitMachine; + +import java.util.List; + +/** + * @author Genius + * @date 2023/07/31 20:14 + **/ +@Data +@AllArgsConstructor +public class Plugin{ + private InitMachine initMachine; + private String moduleName; + private String pluginName; + private List needPlugin; + private boolean enable; +} diff --git a/common/src/main/java/org/example/constpool/ConstPool.java b/common/src/main/java/org/example/constpool/ConstPool.java index 15ce15e..ec139c3 100644 --- a/common/src/main/java/org/example/constpool/ConstPool.java +++ b/common/src/main/java/org/example/constpool/ConstPool.java @@ -9,6 +9,8 @@ import java.util.List; //常量池 public class ConstPool { + public static final String PROJECT_PATH = "org.example"; + /**模块名**/ public static final String FILE = "File"; public static final String ACCOUNT = "Account"; diff --git a/common/src/main/java/org/example/constpool/PluginName.java b/common/src/main/java/org/example/constpool/PluginName.java index 4168891..db6eddb 100644 --- a/common/src/main/java/org/example/constpool/PluginName.java +++ b/common/src/main/java/org/example/constpool/PluginName.java @@ -12,11 +12,11 @@ public class PluginName { //File public static String MODULE_CONFIG_PLUGIN = "ModuleConfig"; - public static String FILE_CACHE_PLUGIN = "FileCache"; + public static final String FILE_CACHE_PLUGIN = "FileCache"; //Creeper - public static String CREEPER_CONFIG_PLUGIN = "CreeperConfig"; - public static String TASK_CENTER_PLUGIN = "TaskCenter"; + public static final String CREEPER_CONFIG_PLUGIN = "CreeperConfig"; + public static final String TASK_CENTER_PLUGIN = "TaskCenter"; //Hot public static String HOT_CONFIG_PLUGIN = "HotConfig"; diff --git a/common/src/main/java/org/example/init/CommonInitMachine.java b/common/src/main/java/org/example/init/CommonInitMachine.java index a6e1637..81aa607 100644 --- a/common/src/main/java/org/example/init/CommonInitMachine.java +++ b/common/src/main/java/org/example/init/CommonInitMachine.java @@ -10,7 +10,6 @@ import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; -import java.util.function.Supplier; /** * 模块中的小模块初始化抽象类 diff --git a/common/src/main/java/org/example/init/InitPluginRegister.java b/common/src/main/java/org/example/init/InitPluginRegister.java index 3cb7e63..d1985d2 100644 --- a/common/src/main/java/org/example/init/InitPluginRegister.java +++ b/common/src/main/java/org/example/init/InitPluginRegister.java @@ -5,6 +5,11 @@ package org.example.init; * @date 2023/07/29 15:21 **/ +import lombok.AllArgsConstructor; +import lombok.Data; +import org.example.bean.Plugin; + +import java.util.List; import java.util.concurrent.ConcurrentHashMap; /** @@ -12,10 +17,12 @@ import java.util.concurrent.ConcurrentHashMap; */ public class InitPluginRegister { + public static ConcurrentHashMap allPlugins = new ConcurrentHashMap<>(); public static ConcurrentHashMap> registerPluginTable = new ConcurrentHashMap<>(); public static boolean isRegister(String pluginName){ return registerPluginTable.containsKey(pluginName); } + } diff --git a/common/src/main/java/org/example/init/ModuleInitMachine.java b/common/src/main/java/org/example/init/ModuleInitMachine.java index 676da30..b5ff94d 100644 --- a/common/src/main/java/org/example/init/ModuleInitMachine.java +++ b/common/src/main/java/org/example/init/ModuleInitMachine.java @@ -1,12 +1,8 @@ package org.example.init; -import lombok.extern.java.Log; import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.List; -import java.util.function.Consumer; -import java.util.function.Function; import java.util.function.Supplier; /** @@ -40,8 +36,13 @@ public abstract class ModuleInitMachine extends CommonInitMachine{ return initLogger(()->{ if(checkNeedPlugin()){ for (InitMachine initMachine : this.getInitMachines()) { - if(!initMachine.init()){ - return fail(); + if (((CommonInitMachine)initMachine).checkNeedPlugin()) { + if(!initMachine.init()){ + return fail(); + } + ((CommonInitMachine) initMachine).registerPlugin(); + }else{ + return false; } } registerPlugin(); diff --git a/common/src/main/java/org/example/log/ChopperLogFactory.java b/common/src/main/java/org/example/log/ChopperLogFactory.java index d4420d8..e74cc37 100644 --- a/common/src/main/java/org/example/log/ChopperLogFactory.java +++ b/common/src/main/java/org/example/log/ChopperLogFactory.java @@ -10,6 +10,10 @@ import org.slf4j.LoggerFactory; public class ChopperLogFactory { public static Logger getLogger(LoggerType loggerType){ - return LoggerFactory.getLogger(loggerType.getLoggerName()); + return getLogger(loggerType.getLoggerName()); + } + + public static Logger getLogger(String name){ + return LoggerFactory.getLogger(name); } } diff --git a/common/src/main/java/org/example/plugin/Plugin.java b/common/src/main/java/org/example/plugin/Plugin.java new file mode 100644 index 0000000..f5ea451 --- /dev/null +++ b/common/src/main/java/org/example/plugin/Plugin.java @@ -0,0 +1,17 @@ +package org.example.plugin; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface Plugin { + + String moduleName(); + String pluginName(); + String[] needPlugin() default {}; + + boolean autoStart() default true; +} diff --git a/common/src/main/java/org/example/util/ClassUtil.java b/common/src/main/java/org/example/util/ClassUtil.java index 93edce9..d328de7 100644 --- a/common/src/main/java/org/example/util/ClassUtil.java +++ b/common/src/main/java/org/example/util/ClassUtil.java @@ -1,9 +1,12 @@ package org.example.util; +import org.reflections.Reflections; + import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Set; /** * @author Genius @@ -46,4 +49,26 @@ public class ClassUtil { } } } + + /** + * 扫描某个注解 + */ + public static Set> getAnnotationClass(String packageName,Class annotationClass){ + //反射 + Reflections ref = new Reflections(packageName); + // 获取扫描到的标记注解的集合 + Set> set = ref.getTypesAnnotatedWith(annotationClass); +// for (Class c : set) { +// // 循环获取标记的注解 +// Plugin annotation = c.getAnnotation(Plugin.class); +// if(annotation!=null){ +// // 打印注解中的内容 +// System.out.println("表名:"+annotation.pluginName()); +// } +// +// } +// Class[] objects = (Class[]) set.toArray(); +// return List.of(objects); + return set; + } } diff --git a/common/src/main/java/org/example/util/PluginUtil.java b/common/src/main/java/org/example/util/PluginUtil.java index 75f49cd..35e6b36 100644 --- a/common/src/main/java/org/example/util/PluginUtil.java +++ b/common/src/main/java/org/example/util/PluginUtil.java @@ -8,7 +8,6 @@ import org.example.init.ModuleInitMachine; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; /** * plugin工具,用来排序module初始化顺序以及检测是否存在相互依赖 diff --git a/config/Creeper/creeperConfig.json b/config/Creeper/creeperConfig.json deleted file mode 100644 index 6e17020..0000000 --- a/config/Creeper/creeperConfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "data":{ - "taskCenter":{ - "queueCapacity":50, - "threads":10, - "waitingTime":1000 - } - }, - "updateTime":"2023-07-31 01:13:20" -} \ No newline at end of file diff --git a/config/Hot/hotModuleConfig.json b/config/Hot/hotModuleConfig.json deleted file mode 100644 index 23e83c0..0000000 --- a/config/Hot/hotModuleConfig.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "data":{ - "GuardNum":10, - "Module":[ - { - "autoWork":true, - "enableHotLive":true, - "enableHotModule":true, - "failRetryTimes":2, - "focusLiver":[], - "followDogEnable":true, - "followDogs":[ - { - "banLiver":[], - "moduleName":"all", - "top":6 - } - ], - "platform":"douyu", - "updateHotLivesTimes":300000, - "updateHotModuleTimes":86400000 - }, - { - "autoWork":true, - "enableHotLive":true, - "enableHotModule":true, - "failRetryTimes":2, - "focusLiver":[], - "followDogEnable":false, - "followDogs":[ - { - "banLiver":[], - "moduleName":"all", - "top":6 - } - ], - "platform":"bilibili", - "updateHotLivesTimes":300000, - "updateHotModuleTimes":86400000 - }, - { - "autoWork":true, - "enableHotLive":true, - "enableHotModule":true, - "failRetryTimes":2, - "focusLiver":[], - "followDogEnable":false, - "followDogs":[ - { - "banLiver":[], - "moduleName":"all", - "top":6 - } - ], - "platform":"huya", - "updateHotLivesTimes":300000, - "updateHotModuleTimes":86400000 - }, - { - "autoWork":true, - "enableHotLive":true, - "enableHotModule":true, - "failRetryTimes":2, - "focusLiver":[], - "followDogEnable":false, - "followDogs":[ - { - "banLiver":[], - "moduleName":"all", - "top":6 - } - ], - "platform":"douying", - "updateHotLivesTimes":300000, - "updateHotModuleTimes":86400000 - } - ] - }, - "updateTime":"2023-07-31 01:13:20" -} diff --git a/config/chopperBotConfig.json b/config/chopperBotConfig.json deleted file mode 100644 index 1b63486..0000000 --- a/config/chopperBotConfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "data":{ - "src":{ - "Publish":"./config/Publish", - "SectionWork":"./config/SectionWork", - "Section":"./config/Section", - "Barrage":"./config/Barrage", - "Hot":"./config/Hot", - "Creeper":"./config/Creeper", - "Account":"./config/Account" - } - }, - "updateTime":"2023-07-31 01:13:19" -} \ No newline at end of file diff --git a/console/src/main/java/org/example/init/ChopperBotConfigFileInitMachine.java b/console/src/main/java/org/example/init/ChopperBotConfigFileInitMachine.java index fd4244c..2816610 100644 --- a/console/src/main/java/org/example/init/ChopperBotConfigFileInitMachine.java +++ b/console/src/main/java/org/example/init/ChopperBotConfigFileInitMachine.java @@ -79,6 +79,7 @@ public class ChopperBotConfigFileInitMachine extends CommonInitMachine { moduleSrcConfigFile.setData(data); GlobalFileCache.ModuleSrcConfigFile = new FileCache(moduleSrcConfigFile); } + InitWorld.pluginSetting = JSONObject.parseObject(GlobalFileCache.ModuleSrcConfigFile.get("plugin").toString(),Map.class); }catch (Exception e) { return false; } diff --git a/console/src/main/java/org/example/init/InitWorld.java b/console/src/main/java/org/example/init/InitWorld.java index 89fcc03..2cada1e 100644 --- a/console/src/main/java/org/example/init/InitWorld.java +++ b/console/src/main/java/org/example/init/InitWorld.java @@ -1,5 +1,6 @@ package org.example.init; +import org.example.plugin.Plugin; import org.example.util.ClassUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; @@ -7,7 +8,11 @@ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; -import java.io.IOException; + +import java.util.Map; +import java.util.Set; + +import static org.example.constpool.ConstPool.PROJECT_PATH; /** * @author Genius @@ -20,6 +25,8 @@ public class InitWorld { @Autowired ChopperBotConfigFileInitMachine moduleSrcConfigFileInitMachine; + + public static Map pluginSetting; private ConfigurableApplicationContext ctx; @@ -48,6 +55,11 @@ public class InitWorld { close(); } + private void getAllPlugin(){ + Set> annotationClass = ClassUtil.getAnnotationClass(PROJECT_PATH + ".init", Plugin.class); + System.out.println(annotationClass); + } + private void close(){ int exit = SpringApplication.exit(ctx, () -> 0); System.exit(exit); diff --git a/console/src/main/java/org/example/init/WorldInitMachine.java b/console/src/main/java/org/example/init/WorldInitMachine.java index 45fff9e..aeaf66d 100644 --- a/console/src/main/java/org/example/init/WorldInitMachine.java +++ b/console/src/main/java/org/example/init/WorldInitMachine.java @@ -1,16 +1,11 @@ package org.example.init; -import lombok.AllArgsConstructor; -import lombok.Data; -import org.example.exception.InitException; import org.example.log.ChopperLogFactory; import org.example.log.LoggerType; import org.example.thread.ChopperBotGuardPool; import org.example.thread.oddjob.OddJobBoy; -import org.example.util.ClassUtil; import org.example.util.PluginUtil; -import java.util.*; import java.util.function.Supplier; /**