Explorar o código

update:引入定时任务模块v2

zhiqiang.lv hai 2 meses
pai
achega
ceaf3d44e4

+ 2 - 1
pom.xml

@@ -107,7 +107,8 @@
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-configuration-processor</artifactId>
-            <version>2.7.0</version>
+            <version>2.1.9.RELEASE</version>
+            <optional>true</optional>
         </dependency>
         <dependency>
             <groupId>com.github.binarywang</groupId>

+ 1 - 3
src/main/java/top/lvzhiqiang/App.java

@@ -4,12 +4,10 @@ import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.scheduling.annotation.EnableAsync;
-import top.lvzhiqiang.config.EnableXXLJob;
 
 @MapperScan(basePackages = "top.lvzhiqiang.mapper")
-@SpringBootApplication
+@SpringBootApplication(scanBasePackages = {"top.lvzhiqiang"})
 @EnableAsync
-@EnableXXLJob
 public class App {
     public static void main(String[] args) {
         SpringApplication.run(App.class, args);

+ 0 - 18
src/main/java/top/lvzhiqiang/config/EnableXXLJob.java

@@ -1,18 +0,0 @@
-package top.lvzhiqiang.config;
-
-import org.springframework.context.annotation.Import;
-
-import java.lang.annotation.*;
-
-/**
- * 启用XXL-JOB定时任务
- *
- * @author shiyong
- * 2022/3/13 12:40
- */
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Import(XXLJobMarkerConfiguration.class)
-public @interface EnableXXLJob {
-}

+ 2 - 2
src/main/java/top/lvzhiqiang/config/InitRunner.java

@@ -27,7 +27,7 @@ import java.util.stream.Collectors;
  * 2020/7/2 10:55
  */
 @Component
-@Order(value = 1)
+//@Order(value = 1)
 public class InitRunner implements ApplicationRunner {
 
     @Resource
@@ -71,7 +71,7 @@ public class InitRunner implements ApplicationRunner {
 
         if (!"dev".equals(env)) {
             coinService.monitorJob();
-            crawler4JavdbService.monitorActors();
+            //crawler4JavdbService.monitorActorsOld();
         }
     }
 

+ 2 - 1
src/main/java/top/lvzhiqiang/config/XXLJobAutoConfiguration.java

@@ -1,6 +1,7 @@
 package top.lvzhiqiang.config;
 
 import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -11,7 +12,7 @@ import org.springframework.context.annotation.Configuration;
  * 2022/3/13 12:40
  */
 @Configuration
-//@ConditionalOnBean(XXLJobMarkerConfiguration.Marker.class)
+@ConditionalOnProperty(value = "xxl.enabled", havingValue = "true", matchIfMissing = false)
 public class XXLJobAutoConfiguration {
     /**
      * 设置XXL-JOB定时任务属性值

+ 0 - 20
src/main/java/top/lvzhiqiang/config/XXLJobMarkerConfiguration.java

@@ -1,20 +0,0 @@
-package top.lvzhiqiang.config;
-
-import org.springframework.context.annotation.Bean;
-
-/**
- * XXL-JOB标记配置类
- *
- * @author shiyong
- * 2022/3/13 12:40
- */
-public class XXLJobMarkerConfiguration {
-    @Bean
-    public Marker xxlJobMarker() {
-        return new Marker();
-    }
-
-    public static class Marker {
-
-    }
-}

+ 32 - 5
src/main/java/top/lvzhiqiang/job/JavdbJob.java

@@ -5,6 +5,9 @@ import com.xxl.job.core.context.XxlJobHelper;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
+import top.lvzhiqiang.service.Crawler4JavdbService;
+
+import javax.annotation.Resource;
 
 /**
  * javdb更新任务
@@ -15,19 +18,43 @@ import org.springframework.stereotype.Component;
 @Component
 @Slf4j
 public class JavdbJob {
+
+    @Resource
+    private Crawler4JavdbService crawler4JavdbService;
+
+    /**
+     * monitorFavorites任务处理器
+     *
+     * @return com.xxl.job.core.biz.model.ReturnT<java.lang.String>
+     * @author lvzhiqiang
+     * 2025/10/15 17:58
+     */
+    @XxlJob("monitorFavoritesJobHandler")
+    public ReturnT<String> monitorFavoritesJobHandler() {
+        try {
+            crawler4JavdbService.monitorFavorites();
+        } catch (Exception e) {
+            log.error("monitorFavoritesJobHandler exception", e);
+            XxlJobHelper.log(e);
+            return ReturnT.FAIL;
+        }
+
+        return ReturnT.SUCCESS;
+    }
+
     /**
-     * test任务处理器
+     * monitorActors任务处理器
      *
      * @return com.xxl.job.core.biz.model.ReturnT<java.lang.String>
      * @author lvzhiqiang
      * 2025/10/15 17:58
      */
-    @XxlJob("testJobHandler")
-    public ReturnT<String> testJobHandler() {
+    @XxlJob("monitorActorsJobHandler")
+    public ReturnT<String> monitorActorsJobHandler() {
         try {
-            XxlJobHelper.log("1111");
+            crawler4JavdbService.monitorActors();
         } catch (Exception e) {
-            log.error("2222", e);
+            log.error("monitorActorsJobHandler exception", e);
             XxlJobHelper.log(e);
             return ReturnT.FAIL;
         }

+ 4 - 2
src/main/java/top/lvzhiqiang/service/Crawler4JavdbService.java

@@ -9,7 +9,9 @@ import com.alibaba.fastjson.JSONObject;
  * 2022/10/17 14:47
  */
 public interface Crawler4JavdbService {
-    void monitorActors();
-
     void monitorAlarm4APP_TEXT_CARD(String content, JSONObject params);
+
+    void monitorFavorites();
+
+    void monitorActors();
 }

+ 125 - 107
src/main/java/top/lvzhiqiang/service/impl/Crawler4JavdbServiceImpl.java

@@ -1,6 +1,7 @@
 package top.lvzhiqiang.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.xxl.job.core.context.XxlJobHelper;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
@@ -29,7 +30,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
 
 /**
  * Crawler Javdb ServiceImpl
@@ -79,127 +79,145 @@ public class Crawler4JavdbServiceImpl implements Crawler4JavdbService {
 
     @Override
     public void monitorActors() {
-        scheduler.scheduleAtFixedRate(() -> {
-            log.warn("monitorActors开始==============================");
-            beforeJavbus();
-
-            String website = "javdb";
-            List<VideoMonitorActors> videoMonitorActorsList = videoMonitorActorsMapper.findAllListByWebsite(website, 1);
-
-            Document document;
-            Elements itembSelects;
-            int findSize = 0;
-            for (VideoMonitorActors videoMonitorActors : videoMonitorActorsList) {
-                try {
-                    List<String> insertCodeList = new ArrayList<>();
-                    List<String> codeList = videoMonitorActorsMapper.findAllLogListBySymbol(videoMonitorActors.getSymbol(), 1);
-
-                    Map<String, String> headerMap = new HashMap<>();
-                    headerMap.put("referer", videoMonitorActors.getHttpUrl());
-                    document = JsoupUtil.requestDocument(videoMonitorActors.getHttpUrl(), JsoupUtil.HTTP_GET, proxy, null, headerMap, null);
-                    itembSelects = document.select("div.movie-list").select("div.item");
-
-                    for (Element itembSelect : itembSelects) {
-                        String code = itembSelect.select("a.box").get(0).select("div.video-title").select("strong").text().trim().toUpperCase();
-                        if (codeList.contains(code)) {
-                            continue;
-                        }
-
-                        String identificationCode = videoMonitorActorsMapper.findAllLogListByCode(code, 1);
-                        if (StringUtils.isNotEmpty(identificationCode)) {
-                            continue;
-                        }
-
-                        insertCodeList.add(code);
-
-                        String url = itembSelect.select("a.box").get(0).attr("abs:href");
-                        String title = itembSelect.select("a.box").get(0).attr("title");
-                        String score = itembSelect.select("a.box").get(0).select("div.score").text().replace("&nbsp;", "").trim();
-                        String date = itembSelect.select("a.box").get(0).select("div.meta").text().trim();
-                        String tags = itembSelect.select("a.box").get(0).select("div.tags").text().trim();
-
-                        String content = "<div class=\"highlight\">演员:" + videoMonitorActors.getActorsRemark() + "</div>" +
-                                "<div>识别码:" + code + "</div>" +
-                                "<div>标题:" + title + "</div>" +
-                                "<div>发行日期:" + date + "</div>" +
-                                "<div class=\"gray\">评价:" + score + "</div>" +
-                                "<div class=\"gray\">标签:" + tags + "</div>";
-
-                        JSONObject params = new JSONObject();
-                        params.put("title", "JAVDB演员监控报警");
-                        params.put("logUrl", url);
-                        params.put("btnTxt", "影片详情");
-                        monitorAlarm4APP_TEXT_CARD(content, params);
-
-                        Thread.sleep(2000);
+        XxlJobHelper.log("monitorActors开始==============================");
+        beforeJavbus();
+
+        String website = "javdb";
+        List<VideoMonitorActors> videoMonitorActorsList = videoMonitorActorsMapper.findAllListByWebsite(website, 1);
+        XxlJobHelper.log("videoMonitorActorsList,website={},size={}", website, videoMonitorActorsList.size());
+
+        Document document;
+        Elements itembSelects;
+        int findSize = 0;
+        for (VideoMonitorActors videoMonitorActors : videoMonitorActorsList) {
+            XxlJobHelper.log("videoMonitorActors start,symbol={},actorsRemark={}", videoMonitorActors.getSymbol(), videoMonitorActors.getActorsRemark());
+            try {
+                List<String> insertCodeList = new ArrayList<>();
+                List<String> codeList = videoMonitorActorsMapper.findAllLogListBySymbol(videoMonitorActors.getSymbol(), 1);
+
+                Map<String, String> headerMap = new HashMap<>();
+                headerMap.put("referer", videoMonitorActors.getHttpUrl());
+                document = JsoupUtil.requestDocument(videoMonitorActors.getHttpUrl(), JsoupUtil.HTTP_GET, proxy, null, headerMap, null);
+                itembSelects = document.select("div.movie-list").select("div.item");
+
+                for (Element itembSelect : itembSelects) {
+                    String code = itembSelect.select("a.box").get(0).select("div.video-title").select("strong").text().trim().toUpperCase();
+                    if (codeList.contains(code)) {
+                        XxlJobHelper.log("videoMonitorActors findAllLogListBySymbol code={} continue", code);
+                        continue;
                     }
 
-                    if (insertCodeList.size() > 0) {
-                        findSize += insertCodeList.size();
-                        videoMonitorActorsMapper.insertLogList(insertCodeList, videoMonitorActors.getSymbol(), 1);
+                    String identificationCode = videoMonitorActorsMapper.findAllLogListByCode(code, 1);
+                    if (StringUtils.isNotEmpty(identificationCode)) {
+                        XxlJobHelper.log("videoMonitorActors findAllLogListByCode code={} continue", code);
+                        continue;
                     }
-                } catch (Exception e) {
-                    e.printStackTrace();
+
+                    insertCodeList.add(code);
+                    XxlJobHelper.log("videoMonitorActors insertCodeList code={} add", code);
+
+                    String url = itembSelect.select("a.box").get(0).attr("abs:href");
+                    String title = itembSelect.select("a.box").get(0).attr("title");
+                    String score = itembSelect.select("a.box").get(0).select("div.score").text().replace("&nbsp;", "").trim();
+                    String date = itembSelect.select("a.box").get(0).select("div.meta").text().trim();
+                    String tags = itembSelect.select("a.box").get(0).select("div.tags").text().trim();
+
+                    String content = "<div class=\"highlight\">演员:" + videoMonitorActors.getActorsRemark() + "</div>" +
+                            "<div>识别码:" + code + "</div>" +
+                            "<div>标题:" + title + "</div>" +
+                            "<div>发行日期:" + date + "</div>" +
+                            "<div class=\"gray\">评价:" + score + "</div>" +
+                            "<div class=\"gray\">标签:" + tags + "</div>";
+
+                    JSONObject params = new JSONObject();
+                    params.put("title", "JAVDB演员监控报警");
+                    params.put("logUrl", url);
+                    params.put("btnTxt", "影片详情");
+                    monitorAlarm4APP_TEXT_CARD(content, params);
+
+                    Thread.sleep(2000);
                 }
+
+                if (!insertCodeList.isEmpty()) {
+                    findSize += insertCodeList.size();
+                    videoMonitorActorsMapper.insertLogList(insertCodeList, videoMonitorActors.getSymbol(), 1);
+                }
+                XxlJobHelper.log("videoMonitorActors end,symbol={},actorsRemark={},size={}", videoMonitorActors.getSymbol(), videoMonitorActors.getActorsRemark(), insertCodeList.size());
+            } catch (Exception e) {
+                XxlJobHelper.log("videoMonitorActors exception,symbol={},actorsRemark={}", videoMonitorActors.getSymbol(), videoMonitorActors.getActorsRemark());
+                XxlJobHelper.log(e);
             }
-            log.warn("monitorActors结束==============================findSize={}", findSize);
-        }, 0, 2, TimeUnit.HOURS);
+        }
 
-        scheduler.scheduleAtFixedRate(() -> {
-            log.warn("monitorActors4Own开始==============================");
-            beforeJavbus();
+        XxlJobHelper.log("monitorActors结束==============================findSize={}", findSize);
+    }
 
-            String website = "javdb";
-            List<VideoMonitorActors> videoMonitorActorsList = videoMonitorActorsMapper.findAllListByWebsite(website, 2);
+    @Override
+    public void monitorFavorites() {
+        XxlJobHelper.log("monitorFavorites开始==============================");
+        beforeJavbus();
+
+        String website = "javdb";
+        List<VideoMonitorActors> videoMonitorActorsList = videoMonitorActorsMapper.findAllListByWebsite(website, 2);
+        XxlJobHelper.log("videoMonitorActorsList,website={},size={}", website, videoMonitorActorsList.size());
+
+        Document document;
+        Elements itembSelects;
+        for (VideoMonitorActors videoMonitorActors : videoMonitorActorsList) {
+            XxlJobHelper.log("videoMonitorActors start,symbol={},actorsRemark={}", videoMonitorActors.getSymbol(), videoMonitorActors.getActorsRemark());
+            Map<String, String> unIcodePoolMap = new HashMap<>();
+            List<String> insertCodeList = new ArrayList<>();
+            try {
+                List<String> codeList = videoMonitorActorsMapper.findAllLogListBySymbol(videoMonitorActors.getSymbol(), 2);
+                Map<String, String> headerMap = new HashMap<>();
+                headerMap.put("referer", videoMonitorActors.getHttpUrl());
+                document = JsoupUtil.requestDocument(videoMonitorActors.getHttpUrl(), JsoupUtil.HTTP_GET, proxy, null, headerMap, null);
+                itembSelects = document.select("div.movie-list").select("div.item");
+
+                for (Element itembSelect : itembSelects) {
+                    String code = itembSelect.select("a.box").get(0).select("div.video-title").select("strong").text().trim().toUpperCase();
+                    if (codeList.contains(code)) {
+                        XxlJobHelper.log("videoMonitorActors findAllLogListBySymbol code={} break", code);
+                        break;
+                    }
 
-            Document document;
-            Elements itembSelects;
-            for (VideoMonitorActors videoMonitorActors : videoMonitorActorsList) {
-                Map<String, String> unIcodePoolMap = new HashMap<>();
-                List<String> insertCodeList = new ArrayList<>();
-                try {
-                    List<String> codeList = videoMonitorActorsMapper.findAllLogListBySymbol(videoMonitorActors.getSymbol(), 2);
-                    Map<String, String> headerMap = new HashMap<>();
-                    headerMap.put("referer", videoMonitorActors.getHttpUrl());
-                    document = JsoupUtil.requestDocument(videoMonitorActors.getHttpUrl(), JsoupUtil.HTTP_GET, proxy, null, headerMap, null);
-                    itembSelects = document.select("div.movie-list").select("div.item");
-
-                    for (Element itembSelect : itembSelects) {
-                        String code = itembSelect.select("a.box").get(0).select("div.video-title").select("strong").text().trim().toUpperCase();
-                        if (codeList.contains(code)) {
-                            break;
-                        }
-
-                        Integer exist = icodePoolMapper.existIcodePoolByCode(code);
-                        if (exist != null) {
-                            insertCodeList.add(code);
-                            continue;
-                        }
-
-                        String url = itembSelect.select("a.box").get(0).attr("abs:href");
-                        unIcodePoolMap.put(code, url);
+                    Integer exist = icodePoolMapper.existIcodePoolByCode(code);
+                    if (exist != null) {
                         insertCodeList.add(code);
+                        XxlJobHelper.log("videoMonitorActors existIcodePoolByCode code={} continue", code);
 
-                        Thread.sleep(2000);
+                        continue;
                     }
 
-                    // insert to IcodePool
-                    if (unIcodePoolMap.size() > 0) {
-                        unIcodePoolMap.forEach((k, v) -> icodePoolMapper.insert(k, v));
-                    }
-                    // insert to video_monitor_actors_log
-                    if (insertCodeList.size() > 0) {
-                        videoMonitorActorsMapper.insertLogList(insertCodeList, videoMonitorActors.getSymbol(), 2);
-                    }
-                    // jsoupIcodePool
-                    bgService.jsoupIcodePool("javdb", 1, 2, 2);
-                } catch (Exception e) {
-                    e.printStackTrace();
+                    String url = itembSelect.select("a.box").get(0).attr("abs:href");
+                    unIcodePoolMap.put(code, url);
+                    insertCodeList.add(code);
+                    XxlJobHelper.log("videoMonitorActors insertCodeList code={} add", code);
+
+                    Thread.sleep(2000);
+                }
+
+                // insert to IcodePool
+                if (!unIcodePoolMap.isEmpty()) {
+                    unIcodePoolMap.forEach((k, v) -> icodePoolMapper.insert(k, v));
+                }
+                XxlJobHelper.log("monitorFavorites icodePoolMapper.insert size={}", unIcodePoolMap.size());
+
+                // insert to video_monitor_actors_log
+                if (!insertCodeList.isEmpty()) {
+                    videoMonitorActorsMapper.insertLogList(insertCodeList, videoMonitorActors.getSymbol(), 2);
                 }
+                XxlJobHelper.log("monitorFavorites videoMonitorActorsMapper.insertLogList size={}", insertCodeList.size());
+
+                // jsoupIcodePool
+                bgService.jsoupIcodePool("javdb", 1, 2, 2);
+            } catch (Exception e) {
+                XxlJobHelper.log("videoMonitorActors exception, symbol={},actorsRemark={}", videoMonitorActors.getSymbol(), videoMonitorActors.getActorsRemark());
+                XxlJobHelper.log(e);
             }
+        }
 
-            log.warn("monitorActors4Own结束==============================");
-        }, 0, 3, TimeUnit.HOURS);
+        XxlJobHelper.log("monitorFavorites结束==============================");
     }
 
     @Override

+ 1 - 0
src/main/resources/application.yml

@@ -51,6 +51,7 @@ work:
 
 # xxl-job定时任务配置信息
 xxl:
+  enabled: false
   job:
     admin:
       # 调度中心部署跟地址:如调度中心集群部署存在多个地址则用逗号分隔。