From eacf4f36181c10e205cd3db7c4d0253b60490a36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=B9=E8=A1=8C=2810032815=29?= Date: Tue, 28 Dec 2021 11:28:28 +0800 Subject: [PATCH] =?UTF-8?q?=E9=82=AE=E4=BB=B6=E6=89=B9=E9=87=8F=E5=8F=91?= =?UTF-8?q?=E9=80=81=20&=20=E6=8A=A5=E8=AD=A6=E6=8E=A5=E5=85=A5=E4=BC=81?= =?UTF-8?q?=E4=B8=9A=E5=BE=AE=E4=BF=A1markdown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 - xxl-job-admin/Dockerfile | 10 +- .../admin/core/alarm/AbstractJobAlarm.java | 39 +++ .../admin/core/alarm/impl/EmailJobAlarm.java | 81 +++--- .../admin/core/alarm/impl/WechatJobAlarm.java | 74 +++++ .../admin/core/conf/XxlJobAdminConfig.java | 34 +++ .../src/main/resources/application.properties | 4 +- .../main/resources/i18n/message_en.properties | 1 + .../resources/i18n/message_zh_CN.properties | 1 + .../resources/i18n/message_zh_TC.properties | 1 + xxl-job-executor-samples/pom.xml | 18 -- .../xxl-job-executor-sample-frameless/pom.xml | 45 ---- .../frameless/FramelessApplication.java | 38 --- .../config/FrameLessXxlJobConfig.java | 93 ------- .../frameless/jobhandler/SampleXxlJob.java | 251 ----------------- .../src/main/resources/log4j.xml | 27 -- .../resources/xxl-job-executor.properties | 17 -- .../test/FramelessApplicationTest.java | 12 - .../Dockerfile | 11 - .../pom.xml | 74 ----- .../executor/XxlJobExecutorApplication.java | 16 -- .../executor/core/config/XxlJobConfig.java | 78 ------ .../mvc/controller/IndexController.java | 18 -- .../service/jobhandler/SampleXxlJob.java | 253 ------------------ .../src/main/resources/application.properties | 26 -- .../src/main/resources/logback.xml | 29 -- ...obExecutorExampleBootApplicationTests.java | 14 - 27 files changed, 195 insertions(+), 1071 deletions(-) create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/AbstractJobAlarm.java create mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/WechatJobAlarm.java delete mode 100644 xxl-job-executor-samples/pom.xml delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/FramelessApplication.java delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/config/FrameLessXxlJobConfig.java delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/jobhandler/SampleXxlJob.java delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/resources/log4j.xml delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/resources/xxl-job-executor.properties delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/test/java/com/xxl/job/executor/sample/frameless/test/FramelessApplicationTest.java delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-springboot/Dockerfile delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/XxlJobExecutorApplication.java delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/mvc/controller/IndexController.java delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/logback.xml delete mode 100644 xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/test/java/com/xxl/job/executor/test/XxlJobExecutorExampleBootApplicationTests.java diff --git a/pom.xml b/pom.xml index f60aa5c1..cb2aa604 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,6 @@ xxl-job-core xxl-job-admin - xxl-job-executor-samples diff --git a/xxl-job-admin/Dockerfile b/xxl-job-admin/Dockerfile index dc195371..bfd2f467 100644 --- a/xxl-job-admin/Dockerfile +++ b/xxl-job-admin/Dockerfile @@ -1,11 +1,9 @@ -FROM openjdk:8-jre-slim -MAINTAINER xuxueli - -ENV PARAMS="" +FROM registry.cn-hangzhou.aliyuncs.com/bimface_common/centos7-jdk8:v2_u181 +MAINTAINER BIMFACE ENV TZ=PRC RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone -ADD target/xxl-job-admin-*.jar /app.jar +ADD target/xxl-job-admin.jar /app.jar -ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"] \ No newline at end of file +ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar "] \ No newline at end of file diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/AbstractJobAlarm.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/AbstractJobAlarm.java new file mode 100644 index 00000000..4571a4d0 --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/AbstractJobAlarm.java @@ -0,0 +1,39 @@ +package com.xxl.job.admin.core.alarm; + +import com.xxl.job.admin.core.conf.XxlJobAdminConfig; +import com.xxl.job.admin.core.util.I18nUtil; +import org.springframework.util.StringUtils; + +public abstract class AbstractJobAlarm { + + protected String appendEnv(String input) { + if (StringUtils.hasText(XxlJobAdminConfig.getAdminConfig().getEnv())) { + return input + "(" + XxlJobAdminConfig.getAdminConfig().getEnv() + ")"; + } + return input; + } + + /** + * load email job alarm template + * + * @return + */ + protected String loadAlarmTemplate(int triggerCode) { + return "" + appendEnv(I18nUtil.getString("jobconf_monitor_detail")) + ",请相关同事注意。\n> " + + I18nUtil.getString("jobinfo_field_jobgroup") + ":{0}\n> " + + I18nUtil.getString("jobinfo_field_id") + ":{1}\n> " + + I18nUtil.getString("jobinfo_field_jobdesc") + ":{2}\n> " + + I18nUtil.getString("jobconf_monitor_alarm_title") + ":" + getAlarmType(triggerCode) + "\n> " + + I18nUtil.getString("jobconf_monitor_alarm_content") + ":{3}\n> "; + } + + protected String getAlarmType(int triggerCode) { + if (triggerCode == 200) { + // 触发成功 即为 执行失败 + return I18nUtil.getString("jobconf_monitor_alarm_execute_fail_type"); + } + // 触发不成功, 为调度失败 + return I18nUtil.getString("jobconf_monitor_alarm_type"); + } + +} diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java index 16e52184..66791311 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java @@ -1,5 +1,6 @@ package com.xxl.job.admin.core.alarm.impl; +import com.xxl.job.admin.core.alarm.AbstractJobAlarm; import com.xxl.job.admin.core.alarm.JobAlarm; import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.core.model.XxlJobGroup; @@ -9,22 +10,21 @@ import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.core.biz.model.ReturnT; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.Order; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; import javax.mail.internet.MimeMessage; import java.text.MessageFormat; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -/** - * job alarm by email - * - * @author xuxueli 2020-01-19 - */ + +///** +// * job alarm by email +// * +// * @author xuxueli 2020-01-19 +// */ +@Order(2) @Component -public class EmailJobAlarm implements JobAlarm { +public class EmailJobAlarm extends AbstractJobAlarm implements JobAlarm { private static Logger logger = LoggerFactory.getLogger(EmailJobAlarm.class); /** @@ -33,52 +33,49 @@ public class EmailJobAlarm implements JobAlarm { * @param jobLog */ @Override - public boolean doAlarm(XxlJobInfo info, XxlJobLog jobLog){ + public boolean doAlarm(XxlJobInfo info, XxlJobLog jobLog) { boolean alarmResult = true; // send monitor email - if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) { + if (info != null && info.getAlarmEmail() != null && info.getAlarmEmail().trim().length() > 0) { // alarmContent String alarmContent = "Alarm Job LogId=" + jobLog.getId(); if (jobLog.getTriggerCode() != ReturnT.SUCCESS_CODE) { alarmContent += "
TriggerMsg=
" + jobLog.getTriggerMsg(); } - if (jobLog.getHandleCode()>0 && jobLog.getHandleCode() != ReturnT.SUCCESS_CODE) { + if (jobLog.getHandleCode() > 0 && jobLog.getHandleCode() != ReturnT.SUCCESS_CODE) { alarmContent += "
HandleCode=" + jobLog.getHandleMsg(); } // email info - XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(Integer.valueOf(info.getJobGroup())); - String personal = I18nUtil.getString("admin_name_full"); - String title = I18nUtil.getString("jobconf_monitor"); - String content = MessageFormat.format(loadEmailJobAlarmTemplate(), - group!=null?group.getTitle():"null", + XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(info.getJobGroup()); + String personal = appendEnv(I18nUtil.getString("admin_name_full")); + String title = appendEnv(I18nUtil.getString("jobconf_monitor")); + String content = MessageFormat.format(loadAlarmTemplate(jobLog.getTriggerCode()), + group != null ? group.getTitle() : "null", info.getId(), info.getJobDesc(), alarmContent); - Set emailSet = new HashSet(Arrays.asList(info.getAlarmEmail().split(","))); - for (String email: emailSet) { - - // make mail - try { - MimeMessage mimeMessage = XxlJobAdminConfig.getAdminConfig().getMailSender().createMimeMessage(); - MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); - helper.setFrom(XxlJobAdminConfig.getAdminConfig().getEmailFrom(), personal); - helper.setTo(email); - helper.setSubject(title); - helper.setText(content, true); + // make mail + try { + MimeMessage mimeMessage = XxlJobAdminConfig.getAdminConfig().getMailSender().createMimeMessage(); - XxlJobAdminConfig.getAdminConfig().getMailSender().send(mimeMessage); - } catch (Exception e) { - logger.error(">>>>>>>>>>> xxl-job, job fail alarm email send error, JobLogId:{}", jobLog.getId(), e); + MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); + helper.setFrom(XxlJobAdminConfig.getAdminConfig().getEmailFrom(), personal); + helper.setTo(info.getAlarmEmail().split(",")); + helper.setSubject(title); + helper.setText(content, true); - alarmResult = false; - } + XxlJobAdminConfig.getAdminConfig().getMailSender().send(mimeMessage); + } catch (Exception e) { + logger.error(">>>>>>>>>>> xxl-job, job fail alarm email send error, JobLogId:{}", jobLog.getId(), e); + alarmResult = false; } + } return alarmResult; @@ -89,16 +86,16 @@ public class EmailJobAlarm implements JobAlarm { * * @return */ - private static final String loadEmailJobAlarmTemplate(){ - String mailBodyTemplate = "
" + I18nUtil.getString("jobconf_monitor_detail") + ":" + + protected String loadAlarmTemplate(int triggerCode) { + String mailBodyTemplate = "
" + appendEnv(I18nUtil.getString("jobconf_monitor_detail")) + ":" + "\n" + " " + " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + " \n" + " \n" + " \n" + @@ -106,7 +103,7 @@ public class EmailJobAlarm implements JobAlarm { " \n" + " \n" + " \n" + - " \n" + + " \n" + " \n" + " \n" + " \n" + diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/WechatJobAlarm.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/WechatJobAlarm.java new file mode 100644 index 00000000..b736cd9a --- /dev/null +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/WechatJobAlarm.java @@ -0,0 +1,74 @@ +package com.xxl.job.admin.core.alarm.impl; + +import com.xxl.job.admin.core.alarm.AbstractJobAlarm; +import com.xxl.job.admin.core.alarm.JobAlarm; +import com.xxl.job.admin.core.conf.XxlJobAdminConfig; +import com.xxl.job.admin.core.model.XxlJobGroup; +import com.xxl.job.admin.core.model.XxlJobInfo; +import com.xxl.job.admin.core.model.XxlJobLog; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.util.XxlJobRemotingUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.text.MessageFormat; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Collectors; + +@Order(1) +@Component +public class WechatJobAlarm extends AbstractJobAlarm implements JobAlarm { + + private static Logger logger = LoggerFactory.getLogger(WechatJobAlarm.class); + + @Override + public boolean doAlarm(XxlJobInfo info, XxlJobLog jobLog) { + boolean alarmResult = true; + + // send monitor email + if (info != null && XxlJobAdminConfig.getAdminConfig().isEnableWeChatAlarm() && StringUtils.hasText(XxlJobAdminConfig.getAdminConfig().getWechatHook())) { + + // alarmContent + String alarmContent = "Alarm Job LogId=" + jobLog.getId(); + if (jobLog.getTriggerCode() != ReturnT.SUCCESS_CODE) { + alarmContent += "\nTriggerMsg=" + jobLog.getTriggerMsg(); + } + if (jobLog.getHandleCode() > 0 && jobLog.getHandleCode() != ReturnT.SUCCESS_CODE) { + alarmContent += "\nHandleCode=" + jobLog.getHandleMsg(); + } + + // email info + XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(info.getJobGroup()); + String s = alarmContent.replaceAll("

", "\n") + .replaceAll("
", "\n") + .replaceAll("", "") + .replaceAll("", ""); + String result = Arrays.asList(s.split("\n")).stream().map(input -> "" + input + "").collect(Collectors.joining("\n")); + String content = MessageFormat.format(loadAlarmTemplate(jobLog.getTriggerCode()), + group != null ? group.getTitle() : "null", + info.getId(), + info.getJobDesc(), + result); + + // make mail + try { + Map body = new HashMap<>(); + body.put("msgtype", "markdown"); + Map markdownContent = new HashMap<>(); + markdownContent.put("content", content); + body.put("markdown", markdownContent); + XxlJobRemotingUtil.postBody(XxlJobAdminConfig.getAdminConfig().getWechatHook(), null, 5, body, String.class); + } catch (Exception e) { + logger.error(">>>>>>>>>>> xxl-job, job fail alarm wechat send error, JobLogId:{}", jobLog.getId(), e); + alarmResult = false; + } + } + + return alarmResult; + } +} diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java index 380b8a59..7a7a9b17 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java @@ -23,6 +23,7 @@ import java.util.Arrays; public class XxlJobAdminConfig implements InitializingBean, DisposableBean { private static XxlJobAdminConfig adminConfig = null; + public static XxlJobAdminConfig getAdminConfig() { return adminConfig; } @@ -67,6 +68,15 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean { @Value("${xxl.job.logretentiondays}") private int logretentiondays; + @Value("${alarm.wechat.hook:}") + private String wechatHook; + + @Value("${alarm.wechat.enabled:false}") + private boolean enableWeChatAlarm; + + @Value("${env:}") + private String env; + // dao, service @Resource @@ -123,6 +133,30 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean { return logretentiondays; } + public String getEnv() { + return env; + } + + public void setEnv(String env) { + this.env = env; + } + + public String getWechatHook() { + return wechatHook; + } + + public void setWechatHook(String wechatHook) { + this.wechatHook = wechatHook; + } + + public boolean isEnableWeChatAlarm() { + return enableWeChatAlarm; + } + + public void setEnableWeChatAlarm(boolean enableWeChatAlarm) { + this.enableWeChatAlarm = enableWeChatAlarm; + } + public XxlJobLogDao getXxlJobLogDao() { return xxlJobLogDao; } diff --git a/xxl-job-admin/src/main/resources/application.properties b/xxl-job-admin/src/main/resources/application.properties index afe93b42..cce08076 100644 --- a/xxl-job-admin/src/main/resources/application.properties +++ b/xxl-job-admin/src/main/resources/application.properties @@ -24,8 +24,8 @@ mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml ### xxl-job, datasource spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai -spring.datasource.username=root -spring.datasource.password=root_pwd +spring.datasource.username=admin +spring.datasource.password=admin spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ### datasource-pool diff --git a/xxl-job-admin/src/main/resources/i18n/message_en.properties b/xxl-job-admin/src/main/resources/i18n/message_en.properties index 7d67636d..1823a8e8 100644 --- a/xxl-job-admin/src/main/resources/i18n/message_en.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_en.properties @@ -239,6 +239,7 @@ jobconf_monitor=Task Scheduling Center monitor alarm jobconf_monitor_detail=monitor alarm details jobconf_monitor_alarm_title=Alarm Type jobconf_monitor_alarm_type=Trigger Fail +jobconf_monitor_alarm_execute_fail_type=Execute Fail jobconf_monitor_alarm_content=Alarm Content jobconf_trigger_admin_adress=Trigger machine address jobconf_trigger_exe_regtype=Execotor-Registry Type diff --git a/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties b/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties index 4897a238..db1d8757 100644 --- a/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties @@ -239,6 +239,7 @@ jobconf_monitor=任务调度中心监控报警 jobconf_monitor_detail=监控告警明细 jobconf_monitor_alarm_title=告警类型 jobconf_monitor_alarm_type=调度失败 +jobconf_monitor_alarm_execute_fail_type=执行失败 jobconf_monitor_alarm_content=告警内容 jobconf_trigger_admin_adress=调度机器 jobconf_trigger_exe_regtype=执行器-注册方式 diff --git a/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties b/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties index 57d28e4f..4dec3323 100755 --- a/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties +++ b/xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties @@ -239,6 +239,7 @@ jobconf_monitor=任務調度中心監控告警 jobconf_monitor_detail=監控告警明细 jobconf_monitor_alarm_title=告警類型 jobconf_monitor_alarm_type=調度失敗 +jobconf_monitor_alarm_execute_fail_type=執行失敗 jobconf_monitor_alarm_content=告警内容 jobconf_trigger_admin_adress=調度機器 jobconf_trigger_exe_regtype=執行器-注冊方式 diff --git a/xxl-job-executor-samples/pom.xml b/xxl-job-executor-samples/pom.xml deleted file mode 100644 index 712daf11..00000000 --- a/xxl-job-executor-samples/pom.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - 4.0.0 - - com.xuxueli - xxl-job - 2.3.1-SNAPSHOT - - xxl-job-executor-samples - pom - - - xxl-job-executor-sample-frameless - xxl-job-executor-sample-springboot - - - \ No newline at end of file diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml deleted file mode 100644 index 39482c54..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - - com.xuxueli - xxl-job-executor-samples - 2.3.1-SNAPSHOT - - xxl-job-executor-sample-frameless - jar - - ${project.artifactId} - Example executor project for spring boot. - https://www.xuxueli.com/ - - - - - - - org.slf4j - slf4j-log4j12 - ${slf4j-api.version} - - - - org.junit.jupiter - junit-jupiter-engine - ${junit-jupiter.version} - test - - - - - com.xuxueli - xxl-job-core - ${project.parent.version} - - - - - - \ No newline at end of file diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/FramelessApplication.java b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/FramelessApplication.java deleted file mode 100644 index 1e7cb7dd..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/FramelessApplication.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.xxl.job.executor.sample.frameless; - -import com.xxl.job.executor.sample.frameless.config.FrameLessXxlJobConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.concurrent.TimeUnit; - -/** - * @author xuxueli 2018-10-31 19:05:43 - */ -public class FramelessApplication { - private static Logger logger = LoggerFactory.getLogger(FramelessApplication.class); - - public static void main(String[] args) { - - try { - // start - FrameLessXxlJobConfig.getInstance().initXxlJobExecutor(); - - // Blocks until interrupted - while (true) { - try { - TimeUnit.HOURS.sleep(1); - } catch (InterruptedException e) { - break; - } - } - } catch (Exception e) { - logger.error(e.getMessage(), e); - } finally { - // destroy - FrameLessXxlJobConfig.getInstance().destroyXxlJobExecutor(); - } - - } - -} diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/config/FrameLessXxlJobConfig.java b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/config/FrameLessXxlJobConfig.java deleted file mode 100644 index 1d882dc5..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/config/FrameLessXxlJobConfig.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.xxl.job.executor.sample.frameless.config; - -import com.xxl.job.executor.sample.frameless.jobhandler.SampleXxlJob; -import com.xxl.job.core.executor.impl.XxlJobSimpleExecutor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.Arrays; -import java.util.Properties; - -/** - * @author xuxueli 2018-10-31 19:05:43 - */ -public class FrameLessXxlJobConfig { - private static Logger logger = LoggerFactory.getLogger(FrameLessXxlJobConfig.class); - - - private static FrameLessXxlJobConfig instance = new FrameLessXxlJobConfig(); - public static FrameLessXxlJobConfig getInstance() { - return instance; - } - - - private XxlJobSimpleExecutor xxlJobExecutor = null; - - /** - * init - */ - public void initXxlJobExecutor() { - - // load executor prop - Properties xxlJobProp = loadProperties("xxl-job-executor.properties"); - - // init executor - xxlJobExecutor = new XxlJobSimpleExecutor(); - xxlJobExecutor.setAdminAddresses(xxlJobProp.getProperty("xxl.job.admin.addresses")); - xxlJobExecutor.setAccessToken(xxlJobProp.getProperty("xxl.job.accessToken")); - xxlJobExecutor.setAppname(xxlJobProp.getProperty("xxl.job.executor.appname")); - xxlJobExecutor.setAddress(xxlJobProp.getProperty("xxl.job.executor.address")); - xxlJobExecutor.setIp(xxlJobProp.getProperty("xxl.job.executor.ip")); - xxlJobExecutor.setPort(Integer.valueOf(xxlJobProp.getProperty("xxl.job.executor.port"))); - xxlJobExecutor.setLogPath(xxlJobProp.getProperty("xxl.job.executor.logpath")); - xxlJobExecutor.setLogRetentionDays(Integer.valueOf(xxlJobProp.getProperty("xxl.job.executor.logretentiondays"))); - - // registry job bean - xxlJobExecutor.setXxlJobBeanList(Arrays.asList(new SampleXxlJob())); - - // start executor - try { - xxlJobExecutor.start(); - } catch (Exception e) { - logger.error(e.getMessage(), e); - } - } - - /** - * destroy - */ - public void destroyXxlJobExecutor() { - if (xxlJobExecutor != null) { - xxlJobExecutor.destroy(); - } - } - - - public static Properties loadProperties(String propertyFileName) { - InputStreamReader in = null; - try { - ClassLoader loder = Thread.currentThread().getContextClassLoader(); - - in = new InputStreamReader(loder.getResourceAsStream(propertyFileName), "UTF-8");; - if (in != null) { - Properties prop = new Properties(); - prop.load(in); - return prop; - } - } catch (IOException e) { - logger.error("load {} error!", propertyFileName); - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - logger.error("close {} error!", propertyFileName); - } - } - } - return null; - } - -} diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/jobhandler/SampleXxlJob.java b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/jobhandler/SampleXxlJob.java deleted file mode 100644 index a4eefd14..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xxl/job/executor/sample/frameless/jobhandler/SampleXxlJob.java +++ /dev/null @@ -1,251 +0,0 @@ -package com.xxl.job.executor.sample.frameless.jobhandler; - -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedInputStream; -import java.io.BufferedReader; -import java.io.DataOutputStream; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.Arrays; -import java.util.concurrent.TimeUnit; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - * - * @author xuxueli 2019-12-11 21:52:51 - */ -public class SampleXxlJob { - private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class); - - - /** - * 1、简单任务示例(Bean模式) - */ - @XxlJob("demoJobHandler") - public void demoJobHandler() throws Exception { - XxlJobHelper.log("XXL-JOB, Hello World."); - - for (int i = 0; i < 5; i++) { - XxlJobHelper.log("beat at:" + i); - TimeUnit.SECONDS.sleep(2); - } - // default success - } - - - /** - * 2、分片广播任务 - */ - @XxlJob("shardingJobHandler") - public void shardingJobHandler() throws Exception { - - // 分片参数 - int shardIndex = XxlJobHelper.getShardIndex(); - int shardTotal = XxlJobHelper.getShardTotal(); - - XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal); - - // 业务逻辑 - for (int i = 0; i < shardTotal; i++) { - if (i == shardIndex) { - XxlJobHelper.log("第 {} 片, 命中分片开始处理", i); - } else { - XxlJobHelper.log("第 {} 片, 忽略", i); - } - } - - } - - - /** - * 3、命令行任务 - */ - @XxlJob("commandJobHandler") - public void commandJobHandler() throws Exception { - String command = XxlJobHelper.getJobParam(); - int exitValue = -1; - - BufferedReader bufferedReader = null; - try { - // command process - ProcessBuilder processBuilder = new ProcessBuilder(); - processBuilder.command(command); - processBuilder.redirectErrorStream(true); - - Process process = processBuilder.start(); - //Process process = Runtime.getRuntime().exec(command); - - BufferedInputStream bufferedInputStream = new BufferedInputStream(process.getInputStream()); - bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream)); - - // command log - String line; - while ((line = bufferedReader.readLine()) != null) { - XxlJobHelper.log(line); - } - - // command exit - process.waitFor(); - exitValue = process.exitValue(); - } catch (Exception e) { - XxlJobHelper.log(e); - } finally { - if (bufferedReader != null) { - bufferedReader.close(); - } - } - - if (exitValue == 0) { - // default success - } else { - XxlJobHelper.handleFail("command exit value("+exitValue+") is failed"); - } - - } - - - /** - * 4、跨平台Http任务 - * 参数示例: - * "url: http://www.baidu.com\n" + - * "method: get\n" + - * "data: content\n"; - */ - @XxlJob("httpJobHandler") - public void httpJobHandler() throws Exception { - - // param parse - String param = XxlJobHelper.getJobParam(); - if (param==null || param.trim().length()==0) { - XxlJobHelper.log("param["+ param +"] invalid."); - - XxlJobHelper.handleFail(); - return; - } - - String[] httpParams = param.split("\n"); - String url = null; - String method = null; - String data = null; - for (String httpParam: httpParams) { - if (httpParam.startsWith("url:")) { - url = httpParam.substring(httpParam.indexOf("url:") + 4).trim(); - } - if (httpParam.startsWith("method:")) { - method = httpParam.substring(httpParam.indexOf("method:") + 7).trim().toUpperCase(); - } - if (httpParam.startsWith("data:")) { - data = httpParam.substring(httpParam.indexOf("data:") + 5).trim(); - } - } - - // param valid - if (url==null || url.trim().length()==0) { - XxlJobHelper.log("url["+ url +"] invalid."); - - XxlJobHelper.handleFail(); - return; - } - if (method==null || !Arrays.asList("GET", "POST").contains(method)) { - XxlJobHelper.log("method["+ method +"] invalid."); - - XxlJobHelper.handleFail(); - return; - } - boolean isPostMethod = method.equals("POST"); - - // request - HttpURLConnection connection = null; - BufferedReader bufferedReader = null; - try { - // connection - URL realUrl = new URL(url); - connection = (HttpURLConnection) realUrl.openConnection(); - - // connection setting - connection.setRequestMethod(method); - connection.setDoOutput(isPostMethod); - connection.setDoInput(true); - connection.setUseCaches(false); - connection.setReadTimeout(5 * 1000); - connection.setConnectTimeout(3 * 1000); - connection.setRequestProperty("connection", "Keep-Alive"); - connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); - connection.setRequestProperty("Accept-Charset", "application/json;charset=UTF-8"); - - // do connection - connection.connect(); - - // data - if (isPostMethod && data!=null && data.trim().length()>0) { - DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream()); - dataOutputStream.write(data.getBytes("UTF-8")); - dataOutputStream.flush(); - dataOutputStream.close(); - } - - // valid StatusCode - int statusCode = connection.getResponseCode(); - if (statusCode != 200) { - throw new RuntimeException("Http Request StatusCode(" + statusCode + ") Invalid."); - } - - // result - bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); - StringBuilder result = new StringBuilder(); - String line; - while ((line = bufferedReader.readLine()) != null) { - result.append(line); - } - String responseMsg = result.toString(); - - XxlJobHelper.log(responseMsg); - - return; - } catch (Exception e) { - XxlJobHelper.log(e); - - XxlJobHelper.handleFail(); - return; - } finally { - try { - if (bufferedReader != null) { - bufferedReader.close(); - } - if (connection != null) { - connection.disconnect(); - } - } catch (Exception e2) { - XxlJobHelper.log(e2); - } - } - - } - - /** - * 5、生命周期任务示例:任务初始化与销毁时,支持自定义相关逻辑; - */ - @XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy") - public void demoJobHandler2() throws Exception { - XxlJobHelper.log("XXL-JOB, Hello World."); - } - public void init(){ - logger.info("init"); - } - public void destroy(){ - logger.info("destroy"); - } - - -} diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/resources/log4j.xml b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/resources/log4j.xml deleted file mode 100644 index 896517e2..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/resources/log4j.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/resources/xxl-job-executor.properties b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/resources/xxl-job-executor.properties deleted file mode 100644 index 15a803a6..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/resources/xxl-job-executor.properties +++ /dev/null @@ -1,17 +0,0 @@ -### xxl-job admin address list, such as "http://address" or "http://address01,http://address02" -xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin - -### xxl-job, access token -xxl.job.accessToken= - -### xxl-job executor appname -xxl.job.executor.appname=xxl-job-executor-sample -### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null -xxl.job.executor.address= -### xxl-job executor server-info -xxl.job.executor.ip= -xxl.job.executor.port=9998 -### xxl-job executor log-path -xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler -### xxl-job executor log-retention-days -xxl.job.executor.logretentiondays=30 \ No newline at end of file diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/test/java/com/xxl/job/executor/sample/frameless/test/FramelessApplicationTest.java b/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/test/java/com/xxl/job/executor/sample/frameless/test/FramelessApplicationTest.java deleted file mode 100644 index 1f9be9a9..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/test/java/com/xxl/job/executor/sample/frameless/test/FramelessApplicationTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.xxl.job.executor.sample.frameless.test; - -import org.junit.jupiter.api.Test; - -public class FramelessApplicationTest { - - @Test - public void test(){ - System.out.println("111"); - } - -} diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/Dockerfile b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/Dockerfile deleted file mode 100644 index 8648d945..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM openjdk:8-jre-slim -MAINTAINER xuxueli - -ENV PARAMS="" - -ENV TZ=PRC -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - -ADD target/xxl-job-executor-sample-springboot-*.jar /app.jar - -ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"] \ No newline at end of file diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml deleted file mode 100644 index 16ac25c0..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - 4.0.0 - - com.xuxueli - xxl-job-executor-samples - 2.3.1-SNAPSHOT - - xxl-job-executor-sample-springboot - jar - - ${project.artifactId} - Example executor project for spring boot. - https://www.xuxueli.com/ - - - - - - - - - org.springframework.boot - spring-boot-starter-parent - ${spring-boot.version} - pom - import - - - - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-test - test - - - - - com.xuxueli - xxl-job-core - ${project.parent.version} - - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - ${spring-boot.version} - - - - repackage - - - - - - - - - \ No newline at end of file diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/XxlJobExecutorApplication.java b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/XxlJobExecutorApplication.java deleted file mode 100644 index d427accb..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/XxlJobExecutorApplication.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.xxl.job.executor; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * @author xuxueli 2018-10-28 00:38:13 - */ -@SpringBootApplication -public class XxlJobExecutorApplication { - - public static void main(String[] args) { - SpringApplication.run(XxlJobExecutorApplication.class, args); - } - -} \ No newline at end of file diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java deleted file mode 100644 index bfd80e22..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.xxl.job.executor.core.config; - -import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * xxl-job config - * - * @author xuxueli 2017-04-28 - */ -@Configuration -public class XxlJobConfig { - private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); - - @Value("${xxl.job.admin.addresses}") - private String adminAddresses; - - @Value("${xxl.job.accessToken}") - private String accessToken; - - @Value("${xxl.job.executor.appname}") - private String appname; - - @Value("${xxl.job.executor.address}") - private String address; - - @Value("${xxl.job.executor.ip}") - private String ip; - - @Value("${xxl.job.executor.port}") - private int port; - - @Value("${xxl.job.executor.logpath}") - private String logPath; - - @Value("${xxl.job.executor.logretentiondays}") - private int logRetentionDays; - - - @Bean - public XxlJobSpringExecutor xxlJobExecutor() { - logger.info(">>>>>>>>>>> xxl-job config init."); - XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); - xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - xxlJobSpringExecutor.setAppname(appname); - xxlJobSpringExecutor.setAddress(address); - xxlJobSpringExecutor.setIp(ip); - xxlJobSpringExecutor.setPort(port); - xxlJobSpringExecutor.setAccessToken(accessToken); - xxlJobSpringExecutor.setLogPath(logPath); - xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); - - return xxlJobSpringExecutor; - } - - /** - * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP; - * - * 1、引入依赖: - * - * org.springframework.cloud - * spring-cloud-commons - * ${version} - * - * - * 2、配置文件,或者容器启动变量 - * spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.' - * - * 3、获取IP - * String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); - */ - - -} \ No newline at end of file diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/mvc/controller/IndexController.java b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/mvc/controller/IndexController.java deleted file mode 100644 index 37c90719..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/mvc/controller/IndexController.java +++ /dev/null @@ -1,18 +0,0 @@ -//package com.xxl.job.executor.mvc.controller; -// -//import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -//import org.springframework.stereotype.Controller; -//import org.springframework.web.bind.annotation.RequestMapping; -//import org.springframework.web.bind.annotation.ResponseBody; -// -//@Controller -//@EnableAutoConfiguration -//public class IndexController { -// -// @RequestMapping("/") -// @ResponseBody -// String index() { -// return "xxl job executor running."; -// } -// -//} \ No newline at end of file diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java deleted file mode 100644 index 759d6625..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java +++ /dev/null @@ -1,253 +0,0 @@ -package com.xxl.job.executor.service.jobhandler; - -import com.xxl.job.core.context.XxlJobHelper; -import com.xxl.job.core.handler.annotation.XxlJob; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import java.io.BufferedInputStream; -import java.io.BufferedReader; -import java.io.DataOutputStream; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.Arrays; -import java.util.concurrent.TimeUnit; - -/** - * XxlJob开发示例(Bean模式) - * - * 开发步骤: - * 1、任务开发:在Spring Bean实例中,开发Job方法; - * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 - * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; - * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; - * - * @author xuxueli 2019-12-11 21:52:51 - */ -@Component -public class SampleXxlJob { - private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class); - - - /** - * 1、简单任务示例(Bean模式) - */ - @XxlJob("demoJobHandler") - public void demoJobHandler() throws Exception { - XxlJobHelper.log("XXL-JOB, Hello World."); - - for (int i = 0; i < 5; i++) { - XxlJobHelper.log("beat at:" + i); - TimeUnit.SECONDS.sleep(2); - } - // default success - } - - - /** - * 2、分片广播任务 - */ - @XxlJob("shardingJobHandler") - public void shardingJobHandler() throws Exception { - - // 分片参数 - int shardIndex = XxlJobHelper.getShardIndex(); - int shardTotal = XxlJobHelper.getShardTotal(); - - XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal); - - // 业务逻辑 - for (int i = 0; i < shardTotal; i++) { - if (i == shardIndex) { - XxlJobHelper.log("第 {} 片, 命中分片开始处理", i); - } else { - XxlJobHelper.log("第 {} 片, 忽略", i); - } - } - - } - - - /** - * 3、命令行任务 - */ - @XxlJob("commandJobHandler") - public void commandJobHandler() throws Exception { - String command = XxlJobHelper.getJobParam(); - int exitValue = -1; - - BufferedReader bufferedReader = null; - try { - // command process - ProcessBuilder processBuilder = new ProcessBuilder(); - processBuilder.command(command); - processBuilder.redirectErrorStream(true); - - Process process = processBuilder.start(); - //Process process = Runtime.getRuntime().exec(command); - - BufferedInputStream bufferedInputStream = new BufferedInputStream(process.getInputStream()); - bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream)); - - // command log - String line; - while ((line = bufferedReader.readLine()) != null) { - XxlJobHelper.log(line); - } - - // command exit - process.waitFor(); - exitValue = process.exitValue(); - } catch (Exception e) { - XxlJobHelper.log(e); - } finally { - if (bufferedReader != null) { - bufferedReader.close(); - } - } - - if (exitValue == 0) { - // default success - } else { - XxlJobHelper.handleFail("command exit value("+exitValue+") is failed"); - } - - } - - - /** - * 4、跨平台Http任务 - * 参数示例: - * "url: http://www.baidu.com\n" + - * "method: get\n" + - * "data: content\n"; - */ - @XxlJob("httpJobHandler") - public void httpJobHandler() throws Exception { - - // param parse - String param = XxlJobHelper.getJobParam(); - if (param==null || param.trim().length()==0) { - XxlJobHelper.log("param["+ param +"] invalid."); - - XxlJobHelper.handleFail(); - return; - } - - String[] httpParams = param.split("\n"); - String url = null; - String method = null; - String data = null; - for (String httpParam: httpParams) { - if (httpParam.startsWith("url:")) { - url = httpParam.substring(httpParam.indexOf("url:") + 4).trim(); - } - if (httpParam.startsWith("method:")) { - method = httpParam.substring(httpParam.indexOf("method:") + 7).trim().toUpperCase(); - } - if (httpParam.startsWith("data:")) { - data = httpParam.substring(httpParam.indexOf("data:") + 5).trim(); - } - } - - // param valid - if (url==null || url.trim().length()==0) { - XxlJobHelper.log("url["+ url +"] invalid."); - - XxlJobHelper.handleFail(); - return; - } - if (method==null || !Arrays.asList("GET", "POST").contains(method)) { - XxlJobHelper.log("method["+ method +"] invalid."); - - XxlJobHelper.handleFail(); - return; - } - boolean isPostMethod = method.equals("POST"); - - // request - HttpURLConnection connection = null; - BufferedReader bufferedReader = null; - try { - // connection - URL realUrl = new URL(url); - connection = (HttpURLConnection) realUrl.openConnection(); - - // connection setting - connection.setRequestMethod(method); - connection.setDoOutput(isPostMethod); - connection.setDoInput(true); - connection.setUseCaches(false); - connection.setReadTimeout(5 * 1000); - connection.setConnectTimeout(3 * 1000); - connection.setRequestProperty("connection", "Keep-Alive"); - connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); - connection.setRequestProperty("Accept-Charset", "application/json;charset=UTF-8"); - - // do connection - connection.connect(); - - // data - if (isPostMethod && data!=null && data.trim().length()>0) { - DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream()); - dataOutputStream.write(data.getBytes("UTF-8")); - dataOutputStream.flush(); - dataOutputStream.close(); - } - - // valid StatusCode - int statusCode = connection.getResponseCode(); - if (statusCode != 200) { - throw new RuntimeException("Http Request StatusCode(" + statusCode + ") Invalid."); - } - - // result - bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); - StringBuilder result = new StringBuilder(); - String line; - while ((line = bufferedReader.readLine()) != null) { - result.append(line); - } - String responseMsg = result.toString(); - - XxlJobHelper.log(responseMsg); - - return; - } catch (Exception e) { - XxlJobHelper.log(e); - - XxlJobHelper.handleFail(); - return; - } finally { - try { - if (bufferedReader != null) { - bufferedReader.close(); - } - if (connection != null) { - connection.disconnect(); - } - } catch (Exception e2) { - XxlJobHelper.log(e2); - } - } - - } - - /** - * 5、生命周期任务示例:任务初始化与销毁时,支持自定义相关逻辑; - */ - @XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy") - public void demoJobHandler2() throws Exception { - XxlJobHelper.log("XXL-JOB, Hello World."); - } - public void init(){ - logger.info("init"); - } - public void destroy(){ - logger.info("destroy"); - } - - -} diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties deleted file mode 100644 index e067db4f..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties +++ /dev/null @@ -1,26 +0,0 @@ -# web port -server.port=8081 -# no web -#spring.main.web-environment=false - -# log config -logging.config=classpath:logback.xml - - -### xxl-job admin address list, such as "http://address" or "http://address01,http://address02" -xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin - -### xxl-job, access token -xxl.job.accessToken= - -### xxl-job executor appname -xxl.job.executor.appname=xxl-job-executor-sample -### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null -xxl.job.executor.address= -### xxl-job executor server-info -xxl.job.executor.ip= -xxl.job.executor.port=9999 -### xxl-job executor log-path -xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler -### xxl-job executor log-retention-days -xxl.job.executor.logretentiondays=30 diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/logback.xml b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/logback.xml deleted file mode 100644 index d5a0d2ca..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/logback.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - logback - - - - - %d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n - - - - - ${log.path} - - ${log.path}.%d{yyyy-MM-dd}.zip - - - %date %level [%thread] %logger{36} [%file : %line] %msg%n - - - - - - - - - - \ No newline at end of file diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/test/java/com/xxl/job/executor/test/XxlJobExecutorExampleBootApplicationTests.java b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/test/java/com/xxl/job/executor/test/XxlJobExecutorExampleBootApplicationTests.java deleted file mode 100644 index 456a7d5a..00000000 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/test/java/com/xxl/job/executor/test/XxlJobExecutorExampleBootApplicationTests.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.xxl.job.executor.test; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -public class XxlJobExecutorExampleBootApplicationTests { - - @Test - public void test() { - System.out.println(11); - } - -} \ No newline at end of file
"+ I18nUtil.getString("jobinfo_field_jobgroup") +""+ I18nUtil.getString("jobinfo_field_id") +""+ I18nUtil.getString("jobinfo_field_jobdesc") +""+ I18nUtil.getString("jobconf_monitor_alarm_title") +""+ I18nUtil.getString("jobconf_monitor_alarm_content") +"" + I18nUtil.getString("jobinfo_field_jobgroup") + "" + I18nUtil.getString("jobinfo_field_id") + "" + I18nUtil.getString("jobinfo_field_jobdesc") + "" + I18nUtil.getString("jobconf_monitor_alarm_title") + "" + I18nUtil.getString("jobconf_monitor_alarm_content") + "
{0}{1}{2}"+ I18nUtil.getString("jobconf_monitor_alarm_type") +"" + getAlarmType(triggerCode) + "{3}