ソースを参照

Merge branch 'master'

xuxueli 6 年 前
コミット
7d62145286

+ 42 - 27
doc/XXL-JOB官方文档.md ファイルの表示

@@ -335,7 +335,7 @@ XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是
335 335
     ### xxl-job admin address list:调度中心部署跟地址:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调"。
336 336
     xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
337 337
     
338
-    ### xxl-job executor address:执行器"AppName"和地址信息配置:AppName执行器心跳注册分组依据;地址信息用于"调度中心请求并触发任务"和"执行器注册"。执行器默认端口为9999,执行器IP默认为空表示自动获取IP,多网卡时可手动设置指定IP,手动设置IP时将会绑定Host。单机部署多个执行器时,注意要配置不同执行器端口;
338
+    ### xxl-job executor address:执行器"AppName"和地址信息配置:AppName执行器心跳注册分组依据;地址信息用于"调度中心请求并触发任务"和"执行器注册"。执行器默认端口为9999,执行器IP默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用。单机部署多个执行器时,注意要配置不同执行器端口;
339 339
     xxl.job.executor.appname=xxl-job-executor-sample
340 340
     xxl.job.executor.ip=
341 341
     xxl.job.executor.port=9999
@@ -1000,6 +1000,14 @@ API服务请求参考代码:com.xxl.executor.test.DemoJobHandlerTest
1000 1000
 默认提供邮件失败告警,可扩展短信、钉钉等方式,扩展代码位置为 "JobFailMonitorHelper.failAlarm";
1001 1001
 
1002 1002
 
1003
+### 5.19 调度中心Docker镜像构建
1004
+可以通过以下命令快速构建调度中心,并启动运行;
1005
+```
1006
+mvn clean package
1007
+docker build -t xuxueli/xxl-job-admin ./xxl-job-admin
1008
+docker run --name xxl-job-admin -p 8080:8080 -d xuxueli/xxl-job-admin
1009
+```
1010
+
1003 1011
 ## 六、版本更新日志
1004 1012
 ### 6.1 版本 V1.1.x,新特性[2015-12-05]
1005 1013
 **【于V1.1.x版本,XXL-JOB正式应用于我司,内部定制别名为 “Ferrari”,新接入应用推荐使用最新版本】**
@@ -1257,7 +1265,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
1257 1265
 - 7、修复脚本任务Log文件未正常close的问题;
1258 1266
 - 8、项目依赖全量升级至较新稳定版本,如spring、jackson等等;
1259 1267
 
1260
-### 6.22 版本 V1.9.2 特性[迭代中]
1268
+### 6.22 版本 V1.9.2 特性[2018-10-05]
1261 1269
 - 1、任务超时控制:新增任务属性 "任务超时时间",并支持自定义,任务运行超时将会主动中断任务;
1262 1270
 - 2、任务失败重试次数:新增任务属性 "失败重试次数",并支持自定义,当任务失败时将会按照预设的失败重试次数主动进行重试;同时收敛废弃其他失败重试策略,如调度失败、执行失败、状态码失败等;
1263 1271
 - 3、新增任务运行模式 "GLUE模式(PHP) ",支持php脚本任务;
@@ -1298,33 +1306,40 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
1298 1306
 - 38、GLUE任务脚本字段类型调整,改为mediumtext类型,提高GLUE长度上限;
1299 1307
 - 39、任务监控线程Log输出优化,运行中任务的监控Log改为debug级别,减少非核心日志量;
1300 1308
 - 40、项目依赖全量升级至较新稳定版本,如spring、Jackson、groovy等等;
1309
+- 41、docker支持:调度中心提供 Dockerfile 方便快速构建docker镜像; 
1310
+
1311
+### 6.23 版本 V2.0.0 特性[迭代中]
1312
+- 1、[迭代中]调度中心迁移到springboot;
1313
+- 2、[迭代中]SimpleTrigger 支持;
1314
+- 3、[迭代中]任务状态与quartz解耦,降低quartz调度压力,仅NORMAL状态任务绑定quartz;
1315
+- 4、[迭代中]新增任务默认运行状态,任务更新时运行状态保持不变;
1316
+- 5、[迭代中]任务权限管理:执行器为粒度分配权限,核心操作校验权限;
1317
+- 6、[迭代中]Release发布时,一同发布调度中心安装包,真正实现开箱即用;
1318
+- 7、[迭代中]docker镜像,并且推送docker镜像到中央仓库,更进一步实现产品开箱即用;
1301 1319
 
1302 1320
 ### TODO LIST
1303
-- 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
1304
-- 2、任务分片路由:分片采用一致性Hash算法计算出尽量稳定的分片顺序,即使注册机器存在波动也不会引起分批分片顺序大的波动;目前采用IP自然排序,可以满足需求,待定;
1305
-- 3、任务单机多线程:提升任务单机并行处理能力;
1306
-- 4、任务依赖,流程图,子任务+会签任务,各节点日志;
1307
-- 5、调度任务优先级;
1308
-- 6、移除quartz依赖,重写调度模块:新增或恢复任务时将下次执行记录插入delayqueue,调度中心集群竞争分布式锁,成功节点批量加载到期delayqueue数据,批量执行。
1309
-- 7、springboot 和 docker镜像,并且推送docker镜像到中央仓库,更进一步实现产品开箱即用;
1310
-- 8、多数据库支持;
1311
-- 9、执行器Log清理功能:调度中心Log删除时同步删除执行器中的Log文件;
1312
-- 10、Bean模式任务,JobHandler自动从执行器中查询展示为下拉框,选择后自动填充任务名称等属性;
1313
-- 11、API事件触发类型任务(更类似MQ消息)支持"动态传参、延时消费";该类型任务不走Quartz,单独建立MQ消息表,调度中心竞争触发;待定,该功能与 XXL-MQ 冲突,该场景建议用后者;
1314
-- 12、调度线程池改为协程方式实现,大幅降低系统内存消耗;
1315
-- 13、任务依赖增强,新增任务类型 "流程任务",流程节点可挂载普通类型任务,承担任务依赖功能。现有子任务模型取消;需要考虑任务依赖死循环问题;
1316
-- 14、任务告警逻辑调整:任务调度,以及任务回调失败时,均推送监控队列。后期考虑通过任务Log字段控制告警状态;
1317
-- 15、新增任务默认运行状态,任务更新时运行状态保持不变;
1318
-- 16、提供多版本执行器:不依赖容器版本、不内嵌Jetty版本(通过配置executoraddress替换jetty通讯)等;
1319
-- 17、注册中心支持扩展,除默认基于DB之外,支持扩展接入第三方注册中心如zk、eureka等;
1320
-- 18、流程任务,支持参数传递;
1321
-- 19、SimpleTrigger 支持;
1322
-- 20、Release发布时,一同发布调度中心安装包,真正实现开箱即用;
1323
-- 21、Cron TimeZone 自定义;
1324
-- 22、忙碌转移优化,全部机器忙碌时不再直接失败;
1325
-- 23、流程任务等,透传动态参数;
1326
-- 24、任务状态与quartz解耦,降低quartz调度压力,仅NORMAL状态任务绑定quartz;
1327
-- 25、批量触发支持,添加参数 "org.quartz.scheduler.batchTriggerAcquisitionMaxCount: 50";
1321
+- 1、任务分片路由:分片采用一致性Hash算法计算出尽量稳定的分片顺序,即使注册机器存在波动也不会引起分批分片顺序大的波动;目前采用IP自然排序,可以满足需求,待定;
1322
+- 2、任务单机多线程:提升任务单机并行处理能力;
1323
+- 3、任务依赖,流程图,子任务+会签任务,各节点日志;
1324
+- 4、调度任务优先级;
1325
+- 5、移除quartz依赖,重写调度模块:新增或恢复任务时将下次执行记录插入delayqueue,调度中心集群竞争分布式锁,成功节点批量加载到期delayqueue数据,批量执行。
1326
+- 6、多数据库支持,在重写并移除Quartz的基础上,DAO层通过JPA实现,不限制数据库类型;
1327
+- 7、执行器Log清理功能:调度中心Log删除时同步删除执行器中的Log文件;
1328
+- 8、Bean模式任务,JobHandler自动从执行器中查询展示为下拉框,选择后自动填充任务名称等属性;
1329
+- 9、API事件触发类型任务(更类似MQ消息)支持"动态传参、延时消费";该类型任务不走Quartz,单独建立MQ消息表,调度中心竞争触发;待定,该功能与 XXL-MQ 冲突,该场景建议用后者;
1330
+- 10、调度线程池改为协程方式实现,大幅降低系统内存消耗;
1331
+- 11、任务依赖增强,新增任务类型 "流程任务",流程节点可挂载普通类型任务,承担任务依赖功能。现有子任务模型取消;需要考虑任务依赖死循环问题;
1332
+- 12、任务告警逻辑调整:任务调度,以及任务回调失败时,均推送监控队列。后期考虑通过任务Log字段控制告警状态;
1333
+- 13、提供多版本执行器:不依赖容器版本、不内嵌Jetty版本(通过配置executoraddress替换jetty通讯)等;
1334
+- 14、注册中心支持扩展,除默认基于DB之外,支持扩展接入第三方注册中心如zk、eureka等;
1335
+- 15、流程任务,支持参数传递;
1336
+- 16、Cron TimeZone 自定义;
1337
+- 17、忙碌转移优化,全部机器忙碌时不再直接失败;
1338
+- 18、流程任务等,透传动态参数;
1339
+- 19、任务支持切换执行器;
1340
+- 20、任务自动注册;待考虑,因为任务自动注册将会导致任务难以管理控制;
1341
+- 21、任务状态与quartz解耦,降低quartz调度压力,仅NORMAL状态任务绑定quartz;
1342
+- 22、批量触发支持,添加参数 "org.quartz.scheduler.batchTriggerAcquisitionMaxCount: 50";
1328 1343
 
1329 1344
 ## 七、其他
1330 1345
 

+ 7 - 3
pom.xml ファイルの表示

@@ -3,7 +3,7 @@
3 3
 	<modelVersion>4.0.0</modelVersion>
4 4
 	<groupId>com.xuxueli</groupId>
5 5
 	<artifactId>xxl-job</artifactId>
6
-	<version>1.9.2-SNAPSHOT</version>
6
+	<version>2.0.0-SNAPSHOT</version>
7 7
 	<packaging>pom</packaging>
8 8
 
9 9
 	<name>${project.artifactId}</name>
@@ -17,6 +17,10 @@
17 17
     </modules>
18 18
 
19 19
 	<properties>
20
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
21
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
22
+		<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
23
+
20 24
 		<javax.servlet-api.version>3.1.0</javax.servlet-api.version>
21 25
 		<javax.servlet.jsp-api.version>2.3.3</javax.servlet.jsp-api.version>
22 26
 
@@ -70,7 +74,7 @@
70 74
 			<plugin>
71 75
 				<groupId>org.apache.maven.plugins</groupId>
72 76
 				<artifactId>maven-war-plugin</artifactId>
73
-				<version>2.2</version>
77
+				<version>2.5</version>
74 78
 				<configuration>
75 79
 					<archiveClasses>false</archiveClasses>
76 80
 				</configuration>
@@ -133,7 +137,7 @@
133 137
 					<plugin>
134 138
 						<groupId>org.apache.maven.plugins</groupId>
135 139
 						<artifactId>maven-javadoc-plugin</artifactId>
136
-						<version>2.9.1</version>
140
+						<version>2.10.3</version>
137 141
 						<executions>
138 142
 							<execution>
139 143
 								<phase>package</phase>

+ 6 - 0
xxl-job-admin/Dockerfile ファイルの表示

@@ -0,0 +1,6 @@
1
+FROM tomcat:8.0-jre8-slim
2
+MAINTAINER xuxueli
3
+
4
+ADD target/xxl-job-admin*.war /usr/local/tomcat/webapps/xxl-job-admin.war
5
+
6
+CMD ["catalina.sh", "run"]

+ 1 - 1
xxl-job-admin/pom.xml ファイルの表示

@@ -4,7 +4,7 @@
4 4
 	<parent>
5 5
 		<groupId>com.xuxueli</groupId>
6 6
 		<artifactId>xxl-job</artifactId>
7
-		<version>1.9.2-SNAPSHOT</version>
7
+		<version>2.0.0-SNAPSHOT</version>
8 8
 	</parent>
9 9
 	<artifactId>xxl-job-admin</artifactId>
10 10
 	<packaging>war</packaging>

+ 1 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java ファイルの表示

@@ -31,7 +31,7 @@ public class ExecutorRouteLFU extends ExecutorRouter {
31 31
         HashMap<String, Integer> lfuItemMap = jobLfuMap.get(jobId);     // Key排序可以用TreeMap+构造入参Compare;Value排序暂时只能通过ArrayList;
32 32
         if (lfuItemMap == null) {
33 33
             lfuItemMap = new HashMap<String, Integer>();
34
-            jobLfuMap.put(jobId, lfuItemMap);
34
+            jobLfuMap.putIfAbsent(jobId, lfuItemMap);   // 避免重复覆盖
35 35
         }
36 36
         for (String address: addressList) {
37 37
             if (!lfuItemMap.containsKey(address) || lfuItemMap.get(address) >1000000 ) {

+ 1 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java ファイルの表示

@@ -37,7 +37,7 @@ public class ExecutorRouteLRU extends ExecutorRouter {
37 37
              *      b、removeEldestEntry:新增元素时将会调用,返回true时会删除最老元素;可封装LinkedHashMap并重写该方法,比如定义最大容量,超出是返回true即可实现固定长度的LRU算法;
38 38
              */
39 39
             lruItem = new LinkedHashMap<>(16, 0.75f, true);
40
-            jobLRUMap.put(jobId, lruItem);
40
+            jobLRUMap.putIfAbsent(jobId, lruItem);
41 41
         }
42 42
 
43 43
         // put

+ 1 - 1
xxl-job-admin/src/main/resources/i18n/message.properties ファイルの表示

@@ -1,6 +1,6 @@
1 1
 admin_name=任务调度中心
2 2
 admin_name_full=分布式任务调度平台XXL-JOB
3
-admin_version=1.9.2 (快照版)
3
+admin_version=2.0.0-SNAPSHOT
4 4
 
5 5
 ## system
6 6
 system_tips=系统提示

+ 2 - 2
xxl-job-admin/src/main/resources/i18n/message_en.properties ファイルの表示

@@ -1,6 +1,6 @@
1 1
 admin_name=Scheduling Center
2 2
 admin_name_full=Distributed Task Scheduling Platform XXL-JOB
3
-admin_version=1.9.2 (SNAPSHOT)
3
+admin_version=2.0.0-SNAPSHOT
4 4
 
5 5
 ## system
6 6
 system_tips=System message
@@ -185,7 +185,7 @@ jobgroup_field_addressType_limit=Manually registration type, the machine address
185 185
 jobgroup_field_registryList=machine address
186 186
 jobgroup_field_registryList_unvalid=registry machine address is illegal
187 187
 jobgroup_field_registryList_placeholder=Please enter the machine address, if there are more than one comma separated
188
-jobgroup_field_appName_limit=Limit the beginning of a lowercase letter, consists of lowercase letters、number and underscores.
188
+jobgroup_field_appName_limit=Limit the beginning of a lowercase letter, consists of lowercase letters、number and hyphen.
189 189
 jobgroup_field_appName_length=AppName length is limited to 4~64
190 190
 jobgroup_field_title_length=Title length is limited to 4~12
191 191
 jobgroup_field_order_digits=Please enter a positive integer

+ 1 - 1
xxl-job-core/pom.xml ファイルの表示

@@ -4,7 +4,7 @@
4 4
 	<parent>
5 5
 		<groupId>com.xuxueli</groupId>
6 6
 		<artifactId>xxl-job</artifactId>
7
-		<version>1.9.2-SNAPSHOT</version>
7
+		<version>2.0.0-SNAPSHOT</version>
8 8
 	</parent>
9 9
 	<artifactId>xxl-job-core</artifactId>
10 10
 	<packaging>jar</packaging>

+ 1 - 1
xxl-job-executor-samples/pom.xml ファイルの表示

@@ -5,7 +5,7 @@
5 5
     <parent>
6 6
         <groupId>com.xuxueli</groupId>
7 7
         <artifactId>xxl-job</artifactId>
8
-        <version>1.9.2-SNAPSHOT</version>
8
+        <version>2.0.0-SNAPSHOT</version>
9 9
     </parent>
10 10
     <artifactId>xxl-job-executor-samples</artifactId>
11 11
     <packaging>pom</packaging>

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-jfinal/pom.xml ファイルの表示

@@ -5,7 +5,7 @@
5 5
     <parent>
6 6
         <artifactId>xxl-job-executor-samples</artifactId>
7 7
         <groupId>com.xuxueli</groupId>
8
-        <version>1.9.2-SNAPSHOT</version>
8
+        <version>2.0.0-SNAPSHOT</version>
9 9
     </parent>
10 10
     <modelVersion>4.0.0</modelVersion>
11 11
     <artifactId>xxl-job-executor-sample-jfinal</artifactId>

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-nutz/pom.xml ファイルの表示

@@ -5,7 +5,7 @@
5 5
     <parent>
6 6
         <groupId>com.xuxueli</groupId>
7 7
         <artifactId>xxl-job-executor-samples</artifactId>
8
-        <version>1.9.2-SNAPSHOT</version>
8
+        <version>2.0.0-SNAPSHOT</version>
9 9
     </parent>
10 10
     <modelVersion>4.0.0</modelVersion>
11 11
     <artifactId>xxl-job-executor-sample-nutz</artifactId>

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-spring/pom.xml ファイルの表示

@@ -4,7 +4,7 @@
4 4
 	<parent>
5 5
 		<groupId>com.xuxueli</groupId>
6 6
 		<artifactId>xxl-job-executor-samples</artifactId>
7
-		<version>1.9.2-SNAPSHOT</version>
7
+		<version>2.0.0-SNAPSHOT</version>
8 8
 	</parent>
9 9
 	<artifactId>xxl-job-executor-sample-spring</artifactId>
10 10
 	<packaging>war</packaging>

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml ファイルの表示

@@ -6,7 +6,7 @@
6 6
     <parent>
7 7
         <groupId>com.xuxueli</groupId>
8 8
         <artifactId>xxl-job-executor-samples</artifactId>
9
-        <version>1.9.2-SNAPSHOT</version>
9
+        <version>2.0.0-SNAPSHOT</version>
10 10
     </parent>
11 11
     <artifactId>xxl-job-executor-sample-springboot</artifactId>
12 12
     <packaging>jar</packaging>