From 8d0f99e781ce407596cdb52b964f33f913fa94f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= <2270033969@qq.com> Date: Fri, 22 Nov 2024 11:35:39 +0800 Subject: [PATCH] =?UTF-8?q?refactor(xxl):=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=20mapper.xml=20=E6=94=AF=E6=8C=81=E8=BE=BE=E6=A2=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pigx-visual/pigx-xxl-job-admin/pom.xml | 7 +- .../admin/core/thread/JobLogReportHelper.java | 234 +++++++++--------- .../mybatis-mapper/XxlJobGroupMapper.xml | 24 +- .../mybatis-mapper/XxlJobLogGlueMapper.xml | 70 +++--- .../mybatis-mapper/XxlJobLogMapper.xml | 168 ++++++------- .../mybatis-mapper/XxlJobLogReportMapper.xml | 52 ++-- .../mybatis-mapper/XxlJobRegistryMapper.xml | 47 ++-- 7 files changed, 294 insertions(+), 308 deletions(-) diff --git a/pigx-visual/pigx-xxl-job-admin/pom.xml b/pigx-visual/pigx-xxl-job-admin/pom.xml index f00f4dd51..654c42a28 100644 --- a/pigx-visual/pigx-xxl-job-admin/pom.xml +++ b/pigx-visual/pigx-xxl-job-admin/pom.xml @@ -55,7 +55,7 @@ spring-boot-starter-mail - + org.mybatis.spring.boot mybatis-spring-boot-starter @@ -71,6 +71,11 @@ mysql-connector-j + + com.dameng + DmJdbcDriver18 + + com.xuxueli diff --git a/pigx-visual/pigx-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java b/pigx-visual/pigx-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java index d2c7c38e4..0e3fc2005 100644 --- a/pigx-visual/pigx-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java +++ b/pigx-visual/pigx-xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java @@ -2,13 +2,11 @@ package com.xxl.job.admin.core.thread; import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.core.model.XxlJobLogReport; +import lombok.Getter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.TimeUnit; /** @@ -16,152 +14,144 @@ import java.util.concurrent.TimeUnit; * * @author xuxueli 2019-11-22 */ + public class JobLogReportHelper { - private static Logger logger = LoggerFactory.getLogger(JobLogReportHelper.class); + private static Logger logger = LoggerFactory.getLogger(JobLogReportHelper.class); - private static JobLogReportHelper instance = new JobLogReportHelper(); + @Getter + private static JobLogReportHelper instance = new JobLogReportHelper(); - public static JobLogReportHelper getInstance() { - return instance; - } + private Thread logrThread; - private Thread logrThread; + private volatile boolean toStop = false; - private volatile boolean toStop = false; + public void start() { + logrThread = new Thread(new Runnable() { - public void start() { - logrThread = new Thread(new Runnable() { + @Override + public void run() { - @Override - public void run() { + // last clean log time + long lastCleanLogTime = 0; - // last clean log time - long lastCleanLogTime = 0; + while (!toStop) { - while (!toStop) { + // 1、log-report refresh: refresh log report in 3 days + try { - // 1、log-report refresh: refresh log report in 3 days - try { + for (int i = 0; i < 3; i++) { - for (int i = 0; i < 3; i++) { + // today + Calendar itemDay = Calendar.getInstance(); + itemDay.add(Calendar.DAY_OF_MONTH, -i); + itemDay.set(Calendar.HOUR_OF_DAY, 0); + itemDay.set(Calendar.MINUTE, 0); + itemDay.set(Calendar.SECOND, 0); + itemDay.set(Calendar.MILLISECOND, 0); - // today - Calendar itemDay = Calendar.getInstance(); - itemDay.add(Calendar.DAY_OF_MONTH, -i); - itemDay.set(Calendar.HOUR_OF_DAY, 0); - itemDay.set(Calendar.MINUTE, 0); - itemDay.set(Calendar.SECOND, 0); - itemDay.set(Calendar.MILLISECOND, 0); + Date todayFrom = itemDay.getTime(); - Date todayFrom = itemDay.getTime(); + itemDay.set(Calendar.HOUR_OF_DAY, 23); + itemDay.set(Calendar.MINUTE, 59); + itemDay.set(Calendar.SECOND, 59); + itemDay.set(Calendar.MILLISECOND, 999); - itemDay.set(Calendar.HOUR_OF_DAY, 23); - itemDay.set(Calendar.MINUTE, 59); - itemDay.set(Calendar.SECOND, 59); - itemDay.set(Calendar.MILLISECOND, 999); + Date todayTo = itemDay.getTime(); - Date todayTo = itemDay.getTime(); + // refresh log-report every minute + XxlJobLogReport xxlJobLogReport = new XxlJobLogReport(); + xxlJobLogReport.setTriggerDay(todayFrom); + xxlJobLogReport.setRunningCount(0); + xxlJobLogReport.setSucCount(0); + xxlJobLogReport.setFailCount(0); - // refresh log-report every minute - XxlJobLogReport xxlJobLogReport = new XxlJobLogReport(); - xxlJobLogReport.setTriggerDay(todayFrom); - xxlJobLogReport.setRunningCount(0); - xxlJobLogReport.setSucCount(0); - xxlJobLogReport.setFailCount(0); + Map triggerCountMap = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao() + .findLogReport(todayFrom, todayTo); + if (triggerCountMap != null && !triggerCountMap.isEmpty()) { + Map lowerTriggerCountMap = new HashMap<>(triggerCountMap.size()); + triggerCountMap.forEach((k, v) -> lowerTriggerCountMap.put(k.toLowerCase(Locale.ROOT), v)); + int triggerDayCount = lowerTriggerCountMap.containsKey("triggerdaycount") ? Integer.parseInt(String.valueOf(lowerTriggerCountMap.get("triggerdaycount"))) : 0; + int triggerDayCountRunning = lowerTriggerCountMap.containsKey("triggerdaycountrunning") ? Integer.parseInt(String.valueOf(lowerTriggerCountMap.get("triggerdaycountrunning"))) : 0; + int triggerDayCountSuc = lowerTriggerCountMap.containsKey("triggerdaycountsuc") ? Integer.parseInt(String.valueOf(lowerTriggerCountMap.get("triggerdaycountsuc"))) : 0; + int triggerDayCountFail = triggerDayCount - triggerDayCountRunning - triggerDayCountSuc; - Map triggerCountMap = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao() - .findLogReport(todayFrom, todayTo); - if (triggerCountMap != null && triggerCountMap.size() > 0) { - int triggerDayCount = triggerCountMap.containsKey("triggerDayCount") - ? Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCount"))) : 0; - int triggerDayCountRunning = triggerCountMap.containsKey("triggerDayCountRunning") - ? Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCountRunning"))) - : 0; - int triggerDayCountSuc = triggerCountMap.containsKey("triggerDayCountSuc") - ? Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCountSuc"))) - : 0; - int triggerDayCountFail = triggerDayCount - triggerDayCountRunning - triggerDayCountSuc; + xxlJobLogReport.setRunningCount(triggerDayCountRunning); + xxlJobLogReport.setSucCount(triggerDayCountSuc); + xxlJobLogReport.setFailCount(triggerDayCountFail); + } - xxlJobLogReport.setRunningCount(triggerDayCountRunning); - xxlJobLogReport.setSucCount(triggerDayCountSuc); - xxlJobLogReport.setFailCount(triggerDayCountFail); - } + // do refresh + int ret = XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao() + .update(xxlJobLogReport); + if (ret < 1) { + XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().save(xxlJobLogReport); + } + } - // do refresh - int ret = XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao() - .update(xxlJobLogReport); - if (ret < 1) { - XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().save(xxlJobLogReport); - } - } + } catch (Exception e) { + if (!toStop) { + logger.error(">>>>>>>>>>> xxl-job, job log report thread error:{}", e); + } + } - } - catch (Exception e) { - if (!toStop) { - logger.error(">>>>>>>>>>> xxl-job, job log report thread error:{}", e); - } - } + // 2、log-clean: switch open & once each day + if (XxlJobAdminConfig.getAdminConfig().getLogretentiondays() > 0 + && System.currentTimeMillis() - lastCleanLogTime > 24 * 60 * 60 * 1000) { - // 2、log-clean: switch open & once each day - if (XxlJobAdminConfig.getAdminConfig().getLogretentiondays() > 0 - && System.currentTimeMillis() - lastCleanLogTime > 24 * 60 * 60 * 1000) { + // expire-time + Calendar expiredDay = Calendar.getInstance(); + expiredDay.add(Calendar.DAY_OF_MONTH, + -1 * XxlJobAdminConfig.getAdminConfig().getLogretentiondays()); + expiredDay.set(Calendar.HOUR_OF_DAY, 0); + expiredDay.set(Calendar.MINUTE, 0); + expiredDay.set(Calendar.SECOND, 0); + expiredDay.set(Calendar.MILLISECOND, 0); + Date clearBeforeTime = expiredDay.getTime(); - // expire-time - Calendar expiredDay = Calendar.getInstance(); - expiredDay.add(Calendar.DAY_OF_MONTH, - -1 * XxlJobAdminConfig.getAdminConfig().getLogretentiondays()); - expiredDay.set(Calendar.HOUR_OF_DAY, 0); - expiredDay.set(Calendar.MINUTE, 0); - expiredDay.set(Calendar.SECOND, 0); - expiredDay.set(Calendar.MILLISECOND, 0); - Date clearBeforeTime = expiredDay.getTime(); + // clean expired log + List logIds = null; + do { + logIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findClearLogIds(0, 0, + clearBeforeTime, 0, 1000); + if (logIds != null && !logIds.isEmpty()) { + XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().clearLog(logIds); + } + } + while (logIds != null && !logIds.isEmpty()); - // clean expired log - List logIds = null; - do { - logIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findClearLogIds(0, 0, - clearBeforeTime, 0, 1000); - if (logIds != null && logIds.size() > 0) { - XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().clearLog(logIds); - } - } - while (logIds != null && logIds.size() > 0); + // update clean time + lastCleanLogTime = System.currentTimeMillis(); + } - // update clean time - lastCleanLogTime = System.currentTimeMillis(); - } + try { + TimeUnit.MINUTES.sleep(1); + } catch (Exception e) { + if (!toStop) { + logger.error(e.getMessage(), e); + } + } - try { - TimeUnit.MINUTES.sleep(1); - } - catch (Exception e) { - if (!toStop) { - logger.error(e.getMessage(), e); - } - } + } - } + logger.info(">>>>>>>>>>> xxl-job, job log report thread stop"); - logger.info(">>>>>>>>>>> xxl-job, job log report thread stop"); + } + }); + logrThread.setDaemon(true); + logrThread.setName("xxl-job, admin JobLogReportHelper"); + logrThread.start(); + } - } - }); - logrThread.setDaemon(true); - logrThread.setName("xxl-job, admin JobLogReportHelper"); - logrThread.start(); - } - - public void toStop() { - toStop = true; - // interrupt and wait - logrThread.interrupt(); - try { - logrThread.join(); - } - catch (InterruptedException e) { - logger.error(e.getMessage(), e); - } - } + public void toStop() { + toStop = true; + // interrupt and wait + logrThread.interrupt(); + try { + logrThread.join(); + } catch (InterruptedException e) { + logger.error(e.getMessage(), e); + } + } } diff --git a/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml b/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml index 87299f88b..fd1846abe 100644 --- a/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml +++ b/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml @@ -1,12 +1,12 @@ - + - + - - + + @@ -35,17 +35,17 @@ - INSERT INTO xxl_job_group ( `app_name`, `title`, `address_type`, `address_list`, `update_time`) + INSERT INTO xxl_job_group ( app_name, title, address_type, address_list, update_time) values ( #{appname}, #{title}, #{addressType}, #{addressList}, #{updateTime} ); UPDATE xxl_job_group - SET `app_name` = #{appname}, - `title` = #{title}, - `address_type` = #{addressType}, - `address_list` = #{addressList}, - `update_time` = #{updateTime} + SET app_name = #{appname}, + title = #{title}, + address_type = #{addressType}, + address_list = #{addressList}, + update_time = #{updateTime} WHERE id = #{id} @@ -88,4 +88,4 @@ - \ No newline at end of file + diff --git a/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml b/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml index 699277c51..8da58647a 100644 --- a/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml +++ b/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml @@ -1,16 +1,16 @@ - + - + - + - - - - + + + + @@ -22,50 +22,50 @@ t.add_time, t.update_time - + INSERT INTO xxl_job_logglue ( - `job_id`, - `glue_type`, - `glue_source`, - `glue_remark`, - `add_time`, - `update_time` + job_id, + glue_type, + glue_source, + glue_remark, + add_time, + update_time ) VALUES ( - #{jobId}, - #{glueType}, - #{glueSource}, - #{glueRemark}, - #{addTime}, - #{updateTime} + #{jobId}, + #{glueType}, + #{glueSource}, + #{glueRemark}, + #{addTime}, + #{updateTime} ); - + - + DELETE FROM xxl_job_logglue WHERE id NOT in( - SELECT id FROM( - SELECT id FROM xxl_job_logglue - WHERE `job_id` = #{jobId} - ORDER BY update_time desc - LIMIT 0, #{limit} - ) t1 - ) AND `job_id` = #{jobId} + SELECT id FROM( + SELECT id FROM xxl_job_logglue + WHERE job_id = #{jobId} + ORDER BY update_time desc + LIMIT 0, #{limit} + ) t1 + ) AND job_id = #{jobId} - + DELETE FROM xxl_job_logglue - WHERE `job_id` = #{jobId} + WHERE job_id = #{jobId} - - \ No newline at end of file + + diff --git a/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml b/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml index 4155f1798..4f7727450 100644 --- a/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml +++ b/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml @@ -1,8 +1,8 @@ - + - + @@ -11,17 +11,17 @@ - + - - - - - - - - + + + + + + + + @@ -43,7 +43,7 @@ t.handle_msg, t.alarm_status - + - + - + - + INSERT INTO xxl_job_log ( - `job_group`, - `job_id`, - `trigger_time`, - `trigger_code`, - `handle_code` + job_group, + job_id, + trigger_time, + trigger_code, + handle_code ) VALUES ( - #{jobGroup}, - #{jobId}, - #{triggerTime}, - #{triggerCode}, - #{handleCode} + #{jobGroup}, + #{jobId}, + #{triggerTime}, + #{triggerCode}, + #{handleCode} ); UPDATE xxl_job_log SET - `trigger_time`= #{triggerTime}, - `trigger_code`= #{triggerCode}, - `trigger_msg`= #{triggerMsg}, - `executor_address`= #{executorAddress}, - `executor_handler`=#{executorHandler}, - `executor_param`= #{executorParam}, - `executor_sharding_param`= #{executorShardingParam}, - `executor_fail_retry_count`= #{executorFailRetryCount} - WHERE `id`= #{id} + trigger_time= #{triggerTime}, + trigger_code= #{triggerCode}, + trigger_msg= #{triggerMsg}, + executor_address= #{executorAddress}, + executor_handler=#{executorHandler}, + executor_param= #{executorParam}, + executor_sharding_param= #{executorShardingParam}, + executor_fail_retry_count= #{executorFailRetryCount} + WHERE id= #{id} UPDATE xxl_job_log - SET - `handle_time`= #{handleTime}, - `handle_code`= #{handleCode}, - `handle_msg`= #{handleMsg} - WHERE `id`= #{id} + SET + handle_time= #{handleTime}, + handle_code= #{handleCode}, + handle_msg= #{handleMsg} + WHERE id= #{id} - + delete from xxl_job_log WHERE job_id = #{jobId} - - SELECT - COUNT(handle_code) triggerDayCount, - SUM(CASE WHEN (trigger_code in (0, 200) and handle_code = 0) then 1 else 0 end) as triggerDayCountRunning, - SUM(CASE WHEN handle_code = 200 then 1 else 0 end) as triggerDayCountSuc + COUNT(handle_code) triggerDayCount, + SUM(CASE WHEN (trigger_code in (0, 200) and handle_code = 0) then 1 else 0 end) as triggerDayCountRunning, + SUM(CASE WHEN handle_code = 200 then 1 else 0 end) as triggerDayCountSuc FROM xxl_job_log WHERE trigger_time BETWEEN #{from} and #{to} - + - SELECT id FROM `xxl_job_log` - WHERE !( - (trigger_code in (0, 200) and handle_code = 0) - OR - (handle_code = 200) + SELECT id + FROM xxl_job_log + WHERE + NOT ( + (trigger_code IN (0, 200) AND handle_code = 0) + OR + (handle_code = 200) ) - AND `alarm_status` = 0 + AND alarm_status = 0 ORDER BY id ASC LIMIT #{pagesize} @@ -242,32 +244,20 @@ UPDATE xxl_job_log SET - `alarm_status` = #{newAlarmStatus} - WHERE `id`= #{logId} AND `alarm_status` = #{oldAlarmStatus} + alarm_status = #{newAlarmStatus} + WHERE id= #{logId} AND alarm_status = #{oldAlarmStatus} - - - \ No newline at end of file + diff --git a/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml b/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml index 579d5f394..29bcaabf3 100644 --- a/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml +++ b/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml @@ -1,14 +1,14 @@ - + - + - + - - + + @@ -18,31 +18,31 @@ t.suc_count, t.fail_count - + INSERT INTO xxl_job_log_report ( - `trigger_day`, - `running_count`, - `suc_count`, - `fail_count` + trigger_day, + running_count, + suc_count, + fail_count ) VALUES ( - #{triggerDay}, - #{runningCount}, - #{sucCount}, - #{failCount} + #{triggerDay}, + #{runningCount}, + #{sucCount}, + #{failCount} ); - UPDATE xxl_job_log_report - SET `running_count` = #{runningCount}, - `suc_count` = #{sucCount}, - `fail_count` = #{failCount} - WHERE `trigger_day` = #{triggerDay} - + UPDATE xxl_job_log_report + SET running_count = #{runningCount}, + suc_count = #{sucCount}, + fail_count = #{failCount} + WHERE trigger_day = #{triggerDay} + SELECT - SUM(running_count) running_count, - SUM(suc_count) suc_count, - SUM(fail_count) fail_count + SUM(running_count) running_count, + SUM(suc_count) suc_count, + SUM(fail_count) fail_count FROM xxl_job_log_report AS t - \ No newline at end of file + diff --git a/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml b/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml index 4cae667a2..fbdd0fcee 100644 --- a/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml +++ b/pigx-visual/pigx-xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml @@ -1,13 +1,13 @@ - + - + - - - + + + @@ -22,9 +22,10 @@ - + DELETE FROM xxl_job_registry WHERE id in @@ -36,27 +37,27 @@ - - UPDATE xxl_job_registry - SET `update_time` = #{updateTime} - WHERE `registry_group` = #{registryGroup} - AND `registry_key` = #{registryKey} - AND `registry_value` = #{registryValue} - + + UPDATE xxl_job_registry + SET update_time = #{updateTime} + WHERE registry_group = #{registryGroup} + AND registry_key = #{registryKey} + AND registry_value = #{registryValue} + - - INSERT INTO xxl_job_registry( `registry_group` , `registry_key` , `registry_value`, `update_time`) - VALUES( #{registryGroup} , #{registryKey} , #{registryValue}, #{updateTime}) - + + INSERT INTO xxl_job_registry( registry_group , registry_key , registry_value, update_time) + VALUES( #{registryGroup} , #{registryKey} , #{registryValue}, #{updateTime}) + DELETE FROM xxl_job_registry WHERE registry_group = #{registryGroup} - AND registry_key = #{registryKey} - AND registry_value = #{registryValue} + AND registry_key = #{registryKey} + AND registry_value = #{registryValue} - \ No newline at end of file +