From 85f042bb0b4058384caf62e5033e816052b2f0a4 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Thu, 28 Dec 2017 12:17:13 +0800 Subject: [PATCH 01/72] =?UTF-8?q?=E6=9B=B4=E6=96=B0RM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index d2aaa475..57bf9abd 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -639,15 +639,22 @@ org.quartz.threadPool.threadPriority: 5 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true ``` -XXL-JOB系统中业务逻辑在远程执行器执行,调度中心每次触发调度时仅发送一次调度请求,执行器会将请求存入执行队列并且立即响应调度中心;相比直接在quartz的QuartzJobBean中执行业务逻辑,极大的降低了调度线程占用; +XXL-JOB系统中业务逻辑在远程执行器执行,全异步化设计,调度中心每次触发调度时仅发送一次调度请求,执行器会将请求存入执行队列并且立即响应调度中心,异步运行;相比直接在quartz的QuartzJobBean中执行业务逻辑,极大的降低了调度线程占用时间; XXL-JOB调度中心中每个JOB逻辑非常 “轻”,单个JOB一次运行平均耗时基本在 "10ms" 之内(基本为一次请求的网络开销);因此,可以保证使用有限的线程支撑大量的JOB并发运行; -理论上采用推荐机器配置 "4核4G内存"情况下,单线程可以承担 100(quartz最小时间粒度1000ms/触发一次任务耗时10ms)个密集任务(每秒执行一次)的正常调度触发。因此,默认配置的15个线程理论上可以承担起1500个密集任务的正常运行。 +理论支撑任务量公式如下: -实际场景中,调度请求网络耗时不同、DB读写耗时不同、任务密集或稀疏调度情况不同,会导致任务量上限会上下波动。 + 理论支撑任务量 = 线程数配置 / 平均调度频率(每秒) * 平均触发耗时(单位s) -如若需要支撑更多的任务量,可以通过 "调大调度线程数" 和 "提升机器配置" 两种方式实现。 +理论上采用推荐机器配置 "4核4G内存" + "配置1s运行1次密集任务" + "调度中心与执行器ping延迟10ms(0.01s)" 的情况下, + + - 单线程支撑任务量 :1 / 1 * 0.01 = 100个任务 + - 15个线程支撑任务量:15 / 1 * 0.01 = 1500个任务 + +实际场景中,由于调度中心与执行器ping延迟不同、DB读写耗时不同、任务调度密集程度不同,会导致任务量上限会上下波动。 + +如若需要支撑更多的任务量,可以通过 "调大调度线程数" 、"降低调度中心与执行器ping延迟" 和 "提升机器配置" 几种方式实现。 #### 5.4.5 @DisallowConcurrentExecution XXL-JOB调度模块的“调度中心”默认不使用该注解,即默认开启并行机制,因为RemoteHttpJobBean为公共QuartzJobBean,这样在多线程调度的情况下,调度模块被阻塞的几率很低,大大提高了调度系统的承载量。 From b3aa981fa8547b096dd7f31a161688c546c20e35 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Fri, 29 Dec 2017 11:37:29 +0800 Subject: [PATCH 02/72] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=AD=9B=E9=80=89=E6=9D=A1=E4=BB=B6=20"?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=8F=8F=E8=BF=B0"=EF=BC=8C=E5=BF=AB?= =?UTF-8?q?=E9=80=9F=E6=A3=80=E7=B4=A2=E4=BB=BB=E5=8A=A1=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 1 + .../xxl/job/admin/controller/JobGroupController.java | 2 +- .../xxl/job/admin/controller/JobInfoController.java | 4 ++-- .../java/com/xxl/job/admin/dao/XxlJobInfoDao.java | 12 ++++++++++-- .../com/xxl/job/admin/service/XxlJobService.java | 2 +- .../job/admin/service/impl/XxlJobServiceImpl.java | 6 +++--- .../resources/mybatis-mapper/XxlJobInfoMapper.xml | 6 ++++++ .../WEB-INF/template/jobinfo/jobinfo.index.ftl | 12 +++++++++--- .../src/main/webapp/static/js/jobinfo.index.1.js | 1 + .../com/xxl/job/admin/dao/XxlJobInfoDaoTest.java | 4 ++-- 10 files changed, 36 insertions(+), 14 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 57bf9abd..76a00641 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -1111,6 +1111,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 27、系统安全性优化,登陆Token写Cookie时进行MD5加密,同时Cookie启用HttpOnly; - 28、新增"任务ID"属性,移除"JobKey"属性,前者承担所有功能,方便后续增强任务依赖功能。 - 29、任务循环依赖问题修复,避免子任务与父任务重复导致的调度死循环; +- 30、任务列表新增筛选条件 "任务描述",快速检索任务; ### TODO LIST - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java index 6211f3c7..66864075 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java @@ -100,7 +100,7 @@ public class JobGroupController { public ReturnT remove(int id){ // valid - int count = xxlJobInfoDao.pageListCount(0, 10, id, null); + int count = xxlJobInfoDao.pageListCount(0, 10, id, null, null); if (count > 0) { return new ReturnT(500, "该分组使用中, 不可删除"); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java index 0962d397..e1dfabbc 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java @@ -53,9 +53,9 @@ public class JobInfoController { @ResponseBody public Map pageList(@RequestParam(required = false, defaultValue = "0") int start, @RequestParam(required = false, defaultValue = "10") int length, - int jobGroup, String executorHandler, String filterTime) { + int jobGroup, String jobDesc, String executorHandler, String filterTime) { - return xxlJobService.pageList(start, length, jobGroup, executorHandler, filterTime); + return xxlJobService.pageList(start, length, jobGroup, jobDesc, executorHandler, filterTime); } @RequestMapping("/add") diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java index 69b556c3..92fbba4e 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java @@ -12,8 +12,16 @@ import java.util.List; */ public interface XxlJobInfoDao { - public List pageList(@Param("offset") int offset, @Param("pagesize") int pagesize, @Param("jobGroup") int jobGroup, @Param("executorHandler") String executorHandler); - public int pageListCount(@Param("offset") int offset, @Param("pagesize") int pagesize, @Param("jobGroup") int jobGroup, @Param("executorHandler") String executorHandler); + public List pageList(@Param("offset") int offset, + @Param("pagesize") int pagesize, + @Param("jobGroup") int jobGroup, + @Param("jobDesc") String jobDesc, + @Param("executorHandler") String executorHandler); + public int pageListCount(@Param("offset") int offset, + @Param("pagesize") int pagesize, + @Param("jobGroup") int jobGroup, + @Param("jobDesc") String jobDesc, + @Param("executorHandler") String executorHandler); public int save(XxlJobInfo info); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java index 7a0c1607..cdea2859 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java @@ -14,7 +14,7 @@ import java.util.Map; */ public interface XxlJobService { - public Map pageList(int start, int length, int jobGroup, String executorHandler, String filterTime); + public Map pageList(int start, int length, int jobGroup, String jobDesc, String executorHandler, String filterTime); public ReturnT add(XxlJobInfo jobInfo); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java index eecef342..5b2ac09c 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java @@ -45,11 +45,11 @@ public class XxlJobServiceImpl implements XxlJobService { private XxlJobLogGlueDao xxlJobLogGlueDao; @Override - public Map pageList(int start, int length, int jobGroup, String executorHandler, String filterTime) { + public Map pageList(int start, int length, int jobGroup, String jobDesc, String executorHandler, String filterTime) { // page list - List list = xxlJobInfoDao.pageList(start, length, jobGroup, executorHandler); - int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, executorHandler); + List list = xxlJobInfoDao.pageList(start, length, jobGroup, jobDesc, executorHandler); + int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, jobDesc, executorHandler); // fill job info if (list!=null && list.size()>0) { diff --git a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml index a5c3abd0..b1fc6302 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml @@ -58,6 +58,9 @@ AND t.job_group = #{jobGroup} + + AND t.job_desc like CONCAT(CONCAT('%', #{jobDesc}), '%') + AND t.executor_handler like CONCAT(CONCAT('%', #{executorHandler}), '%') @@ -73,6 +76,9 @@ AND t.job_group = #{jobGroup} + + AND t.job_desc like CONCAT(CONCAT('%', #{jobDesc}), '%') + AND t.executor_handler like CONCAT(CONCAT('%', #{executorHandler}), '%') diff --git a/xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl b/xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl index 30de5c93..47c32b44 100644 --- a/xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl +++ b/xxl-job-admin/src/main/webapp/WEB-INF/template/jobinfo/jobinfo.index.ftl @@ -32,7 +32,7 @@
-
+
执行器
-
+
+
+ 任务描述 + +
+
+
JobHandler
-
+
diff --git a/xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js b/xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js index 74d88fc2..49fca799 100644 --- a/xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js +++ b/xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js @@ -10,6 +10,7 @@ $(function() { data : function ( d ) { var obj = {}; obj.jobGroup = $('#jobGroup').val(); + obj.jobDesc = $('#jobDesc').val(); obj.executorHandler = $('#executorHandler').val(); obj.start = d.start; obj.length = d.length; diff --git a/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java b/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java index 87c4de9e..ca320d22 100644 --- a/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java +++ b/xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobInfoDaoTest.java @@ -20,8 +20,8 @@ public class XxlJobInfoDaoTest { @Test public void pageList(){ - List list = xxlJobInfoDao.pageList(0, 20, 0, null); - int list_count = xxlJobInfoDao.pageListCount(0, 20, 0, null); + List list = xxlJobInfoDao.pageList(0, 20, 0, null, null); + int list_count = xxlJobInfoDao.pageListCount(0, 20, 0, null, null); System.out.println(list); System.out.println(list_count); From cceccc62764652e8d088408531f4bb8ffd8aca91 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Fri, 29 Dec 2017 12:09:42 +0800 Subject: [PATCH 03/72] =?UTF-8?q?=E6=9B=B4=E6=96=B0RM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 76a00641..967bfffe 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -1128,6 +1128,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 12、Bean模式任务,JobHandler自动从执行器中查询展示为下拉框,选择后自动填充任务名称等属性; - 13、API事件触发类型任务(更类似MQ消息)支持"动态传参、延时消费";该类型任务不走Quartz,单独建立MQ消息表,调度中心竞争触发; - 14、任务依赖增强,新增任务类型 "流程任务",流程节点可挂载普通类型任务,承担任务依赖功能。现有子任务模型取消;需要考虑任务依赖死循环问题; +- 15、分片任务某一分片失败,支持分片转移; ## 七、其他 From dd94810416a12c6a9cf76d2c2cdf592af73f8f79 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Fri, 29 Dec 2017 18:02:22 +0800 Subject: [PATCH 04/72] =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=99=A8=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E9=85=8D=E7=BD=AE=E9=A1=B9=EF=BC=88"xxl.job.executor.?= =?UTF-8?q?logretentiondays"=EF=BC=89=EF=BC=9A=E6=97=A5=E5=BF=97=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E5=A4=A9=E6=95=B0=EF=BC=8C=E6=89=A7=E8=A1=8C=E5=99=A8?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=88=A0=E9=99=A4=E8=BF=87=E6=9C=9F=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=96=87=E4=BB=B6=E3=80=82=E9=99=90=E5=88=B6=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=9C=80=E5=B0=91=E4=BF=9D=E5=AD=983=E5=A4=A9?= =?UTF-8?q?=EF=BC=8C=E5=90=A6=E5=88=99=E5=8A=9F=E8=83=BD=E6=97=A0=E6=95=88?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 1 + .../xxl/job/core/executor/XxlJobExecutor.java | 12 +- .../core/handler/impl/ScriptJobHandler.java | 4 +- .../xxl/job/core/log/XxlJobFileAppender.java | 20 ++- .../core/thread/JobLogFileCleanThread.java | 118 ++++++++++++++++++ .../java/com/xxl/job/core/util/FileUtil.java | 27 ++++ .../resources/applicationcontext-xxl-job.xml | 6 +- .../resources/xxl-job-executor.properties | 7 +- 8 files changed, 186 insertions(+), 9 deletions(-) create mode 100644 xxl-job-core/src/main/java/com/xxl/job/core/thread/JobLogFileCleanThread.java create mode 100644 xxl-job-core/src/main/java/com/xxl/job/core/util/FileUtil.java diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 967bfffe..cf03f3eb 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -1112,6 +1112,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 28、新增"任务ID"属性,移除"JobKey"属性,前者承担所有功能,方便后续增强任务依赖功能。 - 29、任务循环依赖问题修复,避免子任务与父任务重复导致的调度死循环; - 30、任务列表新增筛选条件 "任务描述",快速检索任务; +- 31、执行器新增配置项("xxl.job.executor.logretentiondays"):日志保存天数,执行器自动删除过期日志文件。限制配置最少保存3天,否则功能无效。 ### TODO LIST - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限; diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java index f58853c1..dcc96b7e 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java @@ -8,6 +8,7 @@ import com.xxl.job.core.handler.annotation.JobHandler; import com.xxl.job.core.log.XxlJobFileAppender; import com.xxl.job.core.rpc.netcom.NetComClientProxy; import com.xxl.job.core.rpc.netcom.NetComServerFactory; +import com.xxl.job.core.thread.JobLogFileCleanThread; import com.xxl.job.core.thread.JobThread; import com.xxl.job.core.util.NetUtil; import org.slf4j.Logger; @@ -34,6 +35,7 @@ public class XxlJobExecutor implements ApplicationContextAware { private String adminAddresses; private String accessToken; private String logPath; + private int logRetentionDays; public void setIp(String ip) { this.ip = ip; @@ -53,7 +55,9 @@ public class XxlJobExecutor implements ApplicationContextAware { public void setLogPath(String logPath) { this.logPath = logPath; } - + public void setLogRetentionDays(int logRetentionDays) { + this.logRetentionDays = logRetentionDays; + } // ---------------------- applicationContext ---------------------- private static ApplicationContext applicationContext; @@ -79,6 +83,9 @@ public class XxlJobExecutor implements ApplicationContextAware { // init executor-server initExecutorServer(port, ip, appName, accessToken); + + // init JobLogFileCleanThread + JobLogFileCleanThread.getInstance().start(logRetentionDays); } public void destroy(){ // destory JobThreadRepository @@ -91,6 +98,9 @@ public class XxlJobExecutor implements ApplicationContextAware { // destory executor-server stopExecutorServer(); + + // destory JobLogFileCleanThread + JobLogFileCleanThread.getInstance().toStop(); } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java b/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java index 038eec44..ffa453c6 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java @@ -40,8 +40,8 @@ public class ScriptJobHandler extends IJobHandler { String cmd = glueType.getCmd(); // make script file - String scriptFileName = XxlJobFileAppender.getLogPath() - .concat("/gluesource/") + String scriptFileName = XxlJobFileAppender.getGlueSrcPath() + .concat("/") .concat(String.valueOf(jobId)) .concat("_") .concat(String.valueOf(glueUpdatetime)) diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java b/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java index 0e9dcc23..b2c628a1 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java @@ -20,8 +20,21 @@ public class XxlJobFileAppender { public static final InheritableThreadLocal contextHolder = new InheritableThreadLocal(); - // log base path + /** + * log base path + * + * strut like: + * ---/ + * ---/gluesource/ + * ---/gluesource/10_1514171108000.js + * ---/gluesource/10_1514171108000.js + * ---/2017-12-25/ + * ---/2017-12-25/639.log + * ---/2017-12-25/821.log + * + */ private static String logBasePath = "/data/applogs/xxl-job/jobhandler"; + private static String glueSrcPath = logBasePath.concat("/gluesource"); public static void initLogPath(String logPath){ // init if (logPath!=null && logPath.trim().length()>0) { @@ -39,11 +52,14 @@ public class XxlJobFileAppender { if (!glueBaseDir.exists()) { glueBaseDir.mkdirs(); } + glueSrcPath = glueBaseDir.getPath(); } public static String getLogPath() { return logBasePath; } - + public static String getGlueSrcPath() { + return glueSrcPath; + } /** * log filename, like "logPath/yyyy-MM-dd/9999.log" diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobLogFileCleanThread.java b/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobLogFileCleanThread.java new file mode 100644 index 00000000..bae732b2 --- /dev/null +++ b/xxl-job-core/src/main/java/com/xxl/job/core/thread/JobLogFileCleanThread.java @@ -0,0 +1,118 @@ +package com.xxl.job.core.thread; + +import com.xxl.job.core.log.XxlJobFileAppender; +import com.xxl.job.core.util.FileUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.concurrent.TimeUnit; + +/** + * job file clean thread + * + * @author xuxueli 2017-12-29 16:23:43 + */ +public class JobLogFileCleanThread extends Thread { + private static Logger logger = LoggerFactory.getLogger(JobLogFileCleanThread.class); + + private static JobLogFileCleanThread instance = new JobLogFileCleanThread(); + public static JobLogFileCleanThread getInstance(){ + return instance; + } + + private Thread localThread; + private volatile boolean toStop = false; + public void start(final long logRetentionDays){ + + // limit min value + if (logRetentionDays < 3 ) { + return; + } + + localThread = new Thread(new Runnable() { + @Override + public void run() { + while (!toStop) { + try { + // clean log dir, over logRetentionDays + File[] childDirs = new File(XxlJobFileAppender.getLogPath()).listFiles(); + if (childDirs!=null && childDirs.length>0) { + + // today + Calendar todayCal = Calendar.getInstance(); + todayCal.set(Calendar.HOUR_OF_DAY,0); + todayCal.set(Calendar.MINUTE,0); + todayCal.set(Calendar.SECOND,0); + todayCal.set(Calendar.MILLISECOND,0); + + Date todayDate = todayCal.getTime(); + + for (File childFile: childDirs) { + + // valid + if (!childFile.isDirectory()) { + continue; + } + if (childFile.getName().indexOf("-") == -1) { + continue; + } + + // file create date + Date logFileCreateDate = null; + try { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + logFileCreateDate = simpleDateFormat.parse(childFile.getName()); + } catch (ParseException e) { + logger.error(e.getMessage(), e); + } + if (logFileCreateDate == null) { + continue; + } + + if ((todayDate.getTime()-logFileCreateDate.getTime()) >= logRetentionDays * (24 * 60 * 60 * 1000) ) { + FileUtil.deleteRecursively(childFile); + } + + } + } + + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + + try { + TimeUnit.DAYS.sleep(1); + } catch (InterruptedException e) { + logger.error(e.getMessage(), e); + } + } + logger.info(">>>>>>>>>>> xxl-job, executor JobLogFileCleanThread thread destory."); + + } + }); + localThread.setDaemon(true); + localThread.start(); + } + + public void toStop() { + toStop = true; + + if (localThread == null) { + return; + } + + // interrupt and wait + localThread.interrupt(); + try { + localThread.join(); + } catch (InterruptedException e) { + logger.error(e.getMessage(), e); + } + } + +} diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/util/FileUtil.java b/xxl-job-core/src/main/java/com/xxl/job/core/util/FileUtil.java new file mode 100644 index 00000000..e68cdcde --- /dev/null +++ b/xxl-job-core/src/main/java/com/xxl/job/core/util/FileUtil.java @@ -0,0 +1,27 @@ +package com.xxl.job.core.util; + +import java.io.File; + +/** + * file tool + * + * @author xuxueli 2017-12-29 17:56:48 + */ +public class FileUtil { + + public static boolean deleteRecursively(File root) { + if (root != null && root.exists()) { + if (root.isDirectory()) { + File[] children = root.listFiles(); + if (children != null) { + for (File child : children) { + deleteRecursively(child); + } + } + } + return root.delete(); + } + return false; + } + +} diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/applicationcontext-xxl-job.xml b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/applicationcontext-xxl-job.xml index e11e623d..41bf2351 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/applicationcontext-xxl-job.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/applicationcontext-xxl-job.xml @@ -31,10 +31,12 @@ - - + + + + diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/xxl-job-executor.properties b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/xxl-job-executor.properties index d8b57728..c30e613c 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/xxl-job-executor.properties +++ b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/xxl-job-executor.properties @@ -6,8 +6,11 @@ xxl.job.executor.appname=xxl-job-executor-sample xxl.job.executor.ip= xxl.job.executor.port=9999 +### xxl-job, access token +xxl.job.accessToken= + ### xxl-job log path xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler +### xxl-job log retention days +xxl.job.executor.logretentiondays=-1 -### xxl-job, access token -xxl.job.accessToken= \ No newline at end of file From 5e0ac51a893bfeb2a7b112d6b1f5f09a48dab892 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Fri, 29 Dec 2017 20:02:11 +0800 Subject: [PATCH 05/72] =?UTF-8?q?=E6=9B=B4=E6=96=B0RM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xxl/job/core/executor/XxlJobExecutor.java | 16 ++++++------- .../jfinal/config/JFinalCoreConfig.java | 7 +++--- .../resources/xxl-job-executor.properties | 8 ++++--- .../sample/nutz/config/NutzSetup.java | 7 +++--- .../resources/xxl-job-executor.properties | 8 ++++--- .../resources/applicationcontext-xxl-job.xml | 8 +++---- .../resources/xxl-job-executor.properties | 3 +-- .../executor/core/config/XxlJobConfig.java | 23 +++++++++++-------- .../src/main/resources/application.properties | 12 ++++++---- 9 files changed, 52 insertions(+), 40 deletions(-) diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java index dcc96b7e..ac2324f4 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java @@ -29,26 +29,26 @@ public class XxlJobExecutor implements ApplicationContextAware { private static final Logger logger = LoggerFactory.getLogger(XxlJobExecutor.class); // ---------------------- param ---------------------- + private String adminAddresses; + private String appName; private String ip; private int port; - private String appName; - private String adminAddresses; private String accessToken; private String logPath; private int logRetentionDays; + public void setAdminAddresses(String adminAddresses) { + this.adminAddresses = adminAddresses; + } + public void setAppName(String appName) { + this.appName = appName; + } public void setIp(String ip) { this.ip = ip; } public void setPort(int port) { this.port = port; } - public void setAppName(String appName) { - this.appName = appName; - } - public void setAdminAddresses(String adminAddresses) { - this.adminAddresses = adminAddresses; - } public void setAccessToken(String accessToken) { this.accessToken = accessToken; } diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/config/JFinalCoreConfig.java b/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/config/JFinalCoreConfig.java index 3b16c4af..8a32f53f 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/config/JFinalCoreConfig.java +++ b/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/config/JFinalCoreConfig.java @@ -29,12 +29,13 @@ public class JFinalCoreConfig extends JFinalConfig { // init executor xxlJobExecutor = new XxlJobExecutor(); + xxlJobExecutor.setAdminAddresses(xxlJobProp.get("xxl.job.admin.addresses")); + xxlJobExecutor.setAppName(xxlJobProp.get("xxl.job.executor.appname")); xxlJobExecutor.setIp(xxlJobProp.get("xxl.job.executor.ip")); xxlJobExecutor.setPort(xxlJobProp.getInt("xxl.job.executor.port")); - xxlJobExecutor.setAppName(xxlJobProp.get("xxl.job.executor.appname")); - xxlJobExecutor.setAdminAddresses(xxlJobProp.get("xxl.job.admin.addresses")); - xxlJobExecutor.setLogPath(xxlJobProp.get("xxl.job.executor.logpath")); xxlJobExecutor.setAccessToken(xxlJobProp.get("xxl.job.accessToken")); + xxlJobExecutor.setLogPath(xxlJobProp.get("xxl.job.executor.logpath")); + xxlJobExecutor.setLogRetentionDays(xxlJobProp.getInt("xxl.job.executor.logretentiondays")); // start executor try { diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/resources/xxl-job-executor.properties b/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/resources/xxl-job-executor.properties index 4cafd293..7e4bb804 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/resources/xxl-job-executor.properties +++ b/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/resources/xxl-job-executor.properties @@ -6,8 +6,10 @@ xxl.job.executor.appname=xxl-job-executor-sample xxl.job.executor.ip= xxl.job.executor.port=9996 +### xxl-job, access token +xxl.job.accessToken= + ### xxl-job log path xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler - -### xxl-job, access token -xxl.job.accessToken= \ No newline at end of file +### xxl-job log retention days +xxl.job.executor.logretentiondays=-1 diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-nutz/src/main/java/com/xuxueli/executor/sample/nutz/config/NutzSetup.java b/xxl-job-executor-samples/xxl-job-executor-sample-nutz/src/main/java/com/xuxueli/executor/sample/nutz/config/NutzSetup.java index cc7c9c24..eb370ee2 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-nutz/src/main/java/com/xuxueli/executor/sample/nutz/config/NutzSetup.java +++ b/xxl-job-executor-samples/xxl-job-executor-sample-nutz/src/main/java/com/xuxueli/executor/sample/nutz/config/NutzSetup.java @@ -39,12 +39,13 @@ public class NutzSetup implements Setup { // init executor xxlJobExecutor = new XxlJobExecutor(); + xxlJobExecutor.setAdminAddresses(xxlJobProp.get("xxl.job.admin.addresses")); + xxlJobExecutor.setAppName(xxlJobProp.get("xxl.job.executor.appname")); xxlJobExecutor.setIp(xxlJobProp.get("xxl.job.executor.ip")); xxlJobExecutor.setPort(xxlJobProp.getInt("xxl.job.executor.port")); - xxlJobExecutor.setAppName(xxlJobProp.get("xxl.job.executor.appname")); - xxlJobExecutor.setAdminAddresses(xxlJobProp.get("xxl.job.admin.addresses")); - xxlJobExecutor.setLogPath(xxlJobProp.get("xxl.job.executor.logpath")); xxlJobExecutor.setAccessToken(xxlJobProp.get("xxl.job.accessToken")); + xxlJobExecutor.setLogPath(xxlJobProp.get("xxl.job.executor.logpath")); + xxlJobExecutor.setLogRetentionDays(xxlJobProp.getInt("xxl.job.executor.logretentiondays")); // start executor try { diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-nutz/src/main/resources/xxl-job-executor.properties b/xxl-job-executor-samples/xxl-job-executor-sample-nutz/src/main/resources/xxl-job-executor.properties index 19be360e..e703e006 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-nutz/src/main/resources/xxl-job-executor.properties +++ b/xxl-job-executor-samples/xxl-job-executor-sample-nutz/src/main/resources/xxl-job-executor.properties @@ -6,8 +6,10 @@ xxl.job.executor.appname=xxl-job-executor-sample xxl.job.executor.ip= xxl.job.executor.port=9997 +### xxl-job, access token +xxl.job.accessToken= + ### xxl-job log path xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler - -### xxl-job, access token -xxl.job.accessToken= \ No newline at end of file +### xxl-job log retention days +xxl.job.executor.logretentiondays=-1 diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/applicationcontext-xxl-job.xml b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/applicationcontext-xxl-job.xml index 41bf2351..afa930db 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/applicationcontext-xxl-job.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/applicationcontext-xxl-job.xml @@ -23,14 +23,14 @@ + + + + - - - - diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/xxl-job-executor.properties b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/xxl-job-executor.properties index c30e613c..2fda3391 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/xxl-job-executor.properties +++ b/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/xxl-job-executor.properties @@ -4,7 +4,7 @@ xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin ### xxl-job executor address xxl.job.executor.appname=xxl-job-executor-sample xxl.job.executor.ip= -xxl.job.executor.port=9999 +xxl.job.executor.port=9998 ### xxl-job, access token xxl.job.accessToken= @@ -13,4 +13,3 @@ xxl.job.accessToken= xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler ### xxl-job log retention days xxl.job.executor.logretentiondays=-1 - 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 index 1578fa7f..64e97027 100644 --- 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 @@ -18,12 +18,11 @@ import org.springframework.context.annotation.Configuration; public class XxlJobConfig { private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); - @Value("${xxl.job.admin.addresses}") - private String addresses; + private String adminAddresses; @Value("${xxl.job.executor.appname}") - private String appname; + private String appName; @Value("${xxl.job.executor.ip}") private String ip; @@ -31,22 +30,28 @@ public class XxlJobConfig { @Value("${xxl.job.executor.port}") private int port; - @Value("${xxl.job.executor.logpath}") - private String logpath; - @Value("${xxl.job.accessToken}") private String accessToken; + @Value("${xxl.job.executor.logpath}") + private String logPath; + + @Value("xxl.job.executor.logretentiondays") + private int logRetentionDays; + + @Bean(initMethod = "start", destroyMethod = "destroy") public XxlJobExecutor xxlJobExecutor() { logger.info(">>>>>>>>>>> xxl-job config init."); XxlJobExecutor xxlJobExecutor = new XxlJobExecutor(); + xxlJobExecutor.setAdminAddresses(adminAddresses); + xxlJobExecutor.setAppName(appName); xxlJobExecutor.setIp(ip); xxlJobExecutor.setPort(port); - xxlJobExecutor.setAppName(appname); - xxlJobExecutor.setAdminAddresses(addresses); - xxlJobExecutor.setLogPath(logpath); xxlJobExecutor.setAccessToken(accessToken); + xxlJobExecutor.setLogPath(logPath); + xxlJobExecutor.setLogRetentionDays(logRetentionDays); + return xxlJobExecutor; } 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 index 71fb98f2..2f0c3661 100644 --- 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 @@ -4,17 +4,19 @@ server.port=8081 # log config logging.config=classpath:logback.xml -# xxl-job + ### 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 executor address xxl.job.executor.appname=xxl-job-executor-sample xxl.job.executor.ip= -xxl.job.executor.port=9998 - -### xxl-job log path -xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler +xxl.job.executor.port=9999 ### xxl-job, access token xxl.job.accessToken= + +### xxl-job log path +xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler +### xxl-job log retention days +xxl.job.executor.logretentiondays=-1 From 6393214098fa03a5d7c9c9f97f50b2869c5f82f2 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Fri, 29 Dec 2017 20:12:03 +0800 Subject: [PATCH 06/72] =?UTF-8?q?=E6=9B=B4=E6=96=B0RM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xxl/job/executor/core/config/XxlJobConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 64e97027..a90e43e1 100644 --- 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 @@ -36,7 +36,7 @@ public class XxlJobConfig { @Value("${xxl.job.executor.logpath}") private String logPath; - @Value("xxl.job.executor.logretentiondays") + @Value("${xxl.job.executor.logretentiondays}") private int logRetentionDays; From 935e1d19932e7eb0a2b53ba18d07a4c1f6147347 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Fri, 29 Dec 2017 20:16:04 +0800 Subject: [PATCH 07/72] =?UTF-8?q?=E6=9B=B4=E6=96=B0RM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index cf03f3eb..9f47c4dd 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -1112,7 +1112,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 28、新增"任务ID"属性,移除"JobKey"属性,前者承担所有功能,方便后续增强任务依赖功能。 - 29、任务循环依赖问题修复,避免子任务与父任务重复导致的调度死循环; - 30、任务列表新增筛选条件 "任务描述",快速检索任务; -- 31、执行器新增配置项("xxl.job.executor.logretentiondays"):日志保存天数,执行器自动删除过期日志文件。限制配置最少保存3天,否则功能无效。 +- 31、执行器Log文件定期清理功能:执行器新增配置项("xxl.job.executor.logretentiondays")日志保存天数,日志文件过期自动删除。限制至少保持3天; ### TODO LIST - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限; From 7b15aa393e5206b4bcba96cf718c4142695dce83 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Fri, 29 Dec 2017 20:24:07 +0800 Subject: [PATCH 08/72] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E8=87=B3=E6=AD=A3?= =?UTF-8?q?=E5=BC=8F=E7=89=88=E6=9C=AC=EF=BC=9Av1.9.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 4 ++-- pom.xml | 2 +- xxl-job-admin/pom.xml | 2 +- xxl-job-core/pom.xml | 2 +- xxl-job-executor-samples/pom.xml | 2 +- .../xxl-job-executor-sample-jfinal/pom.xml | 2 +- xxl-job-executor-samples/xxl-job-executor-sample-nutz/pom.xml | 2 +- .../xxl-job-executor-sample-spring/pom.xml | 2 +- .../xxl-job-executor-sample-springboot/pom.xml | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 9f47c4dd..e16c0b04 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -1081,7 +1081,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 9、调度中心任务监控线程销毁时,批量对失败任务告警,防止告警信息丢失; - 10、任务日志文件路径时间戳格式化时SimpleDateFormat并发问题解决; -### 6.20 版本 V1.9.0 特性[迭代中] +### 6.20 版本 V1.9.0 特性[2017-12-29] - 1、新增Nutz执行器Sample示例项目; - 2、新增任务运行模式 "GLUE模式(NodeJS) ",支持NodeJS脚本任务; - 3、脚本任务Shell、Python和Nodejs等支持获取分片参数; @@ -1091,7 +1091,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 7、调度报表优化,支持时间区间筛选; - 8、Log组件支持输出异常栈信息,底层实现优化; - 9、告警邮件样式优化,调整为表格形式,邮件组件调整为commons-email简化邮件操作; -- 10、项目依赖升级,如spring、jackson等; +- 10、项目依赖全量升级至较新稳定版本,如spring、jackson等等; - 11、任务日志,记录发起调度的机器信息; - 12、交互优化,如登陆注销; - 13、任务Cron长度扩展支持至128位,支持负责类型Cron设置; diff --git a/pom.xml b/pom.xml index f7f3d33c..3640d8b3 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.xuxueli xxl-job - 1.9.0-SNAPSHOT + 1.9.0 pom ${project.artifactId} diff --git a/xxl-job-admin/pom.xml b/xxl-job-admin/pom.xml index 2498c234..8500870a 100644 --- a/xxl-job-admin/pom.xml +++ b/xxl-job-admin/pom.xml @@ -4,7 +4,7 @@ com.xuxueli xxl-job - 1.9.0-SNAPSHOT + 1.9.0 xxl-job-admin war diff --git a/xxl-job-core/pom.xml b/xxl-job-core/pom.xml index a46a61b1..aa611bec 100644 --- a/xxl-job-core/pom.xml +++ b/xxl-job-core/pom.xml @@ -4,7 +4,7 @@ com.xuxueli xxl-job - 1.9.0-SNAPSHOT + 1.9.0 xxl-job-core jar diff --git a/xxl-job-executor-samples/pom.xml b/xxl-job-executor-samples/pom.xml index 34479551..e5058547 100644 --- a/xxl-job-executor-samples/pom.xml +++ b/xxl-job-executor-samples/pom.xml @@ -5,7 +5,7 @@ com.xuxueli xxl-job - 1.9.0-SNAPSHOT + 1.9.0 xxl-job-executor-samples pom diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/pom.xml index 17444ffb..b57d49ca 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/pom.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-jfinal/pom.xml @@ -5,7 +5,7 @@ xxl-job-executor-samples com.xuxueli - 1.9.0-SNAPSHOT + 1.9.0 4.0.0 xxl-job-executor-sample-jfinal diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-nutz/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-nutz/pom.xml index 56e2581c..799d1453 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-nutz/pom.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-nutz/pom.xml @@ -5,7 +5,7 @@ com.xuxueli xxl-job-executor-samples - 1.9.0-SNAPSHOT + 1.9.0 4.0.0 xxl-job-executor-sample-nutz diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-spring/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-spring/pom.xml index c1390f16..2c411784 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-spring/pom.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-spring/pom.xml @@ -4,7 +4,7 @@ com.xuxueli xxl-job-executor-samples - 1.9.0-SNAPSHOT + 1.9.0 xxl-job-executor-sample-spring war 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 index 82642bfb..f7b862a6 100644 --- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml +++ b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml @@ -6,7 +6,7 @@ com.xuxueli xxl-job-executor-samples - 1.9.0-SNAPSHOT + 1.9.0 xxl-job-executor-sample-springboot jar From 86ae3394d604cc81221910974b953fcc58518054 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Fri, 29 Dec 2017 20:25:12 +0800 Subject: [PATCH 09/72] =?UTF-8?q?=E6=9B=B4=E6=96=B0RM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index e16c0b04..3d24e6eb 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -147,7 +147,7 @@ XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是 com.xuxueli xxl-job-core - 1.8.2 + ${最新稳定版本} ``` From bf449e1be3e54f3f1b7244d6dfbe7c7f8583ed21 Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Fri, 29 Dec 2017 20:27:01 +0800 Subject: [PATCH 10/72] =?UTF-8?q?=E6=9B=B4=E6=96=B0RM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/webapp/WEB-INF/template/common/common.macro.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl b/xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl index c303d616..fc46dae2 100644 --- a/xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl +++ b/xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl @@ -175,7 +175,7 @@ <#macro commonFooter >