瀏覽代碼

脚本任务,底层逻辑调整

xueli.xue 8 年之前
父節點
當前提交
f93302a546

+ 28 - 27
README.md 查看文件

24
 - 17、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移;
24
 - 17、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移;
25
 - 18、Rolling日志:支持以Rolling方式实时查看执行器输出的日志信息,实时监控任务进度;
25
 - 18、Rolling日志:支持以Rolling方式实时查看执行器输出的日志信息,实时监控任务进度;
26
 - 19、运行报表:支持实时查看运行数据,如任务数量、调度次数、执行器数量等;以及调度报表,如调度日期分布图,调度成功分布图等;
26
 - 19、运行报表:支持实时查看运行数据,如任务数量、调度次数、执行器数量等;以及调度报表,如调度日期分布图,调度成功分布图等;
27
-- 20、脚本任务:支持开发脚本任务,如Shell、Python和Groovy等脚本;
27
+- 20、脚本任务:支持以GLUE模式开发和运行脚本任务,包括Shell、Python等类型脚本;
28
 
28
 
29
 #### 1.3 发展
29
 #### 1.3 发展
30
 于2015年中,我在github上创建XXL-JOB项目仓库并提交第一个commit,随之进行系统结构设计,UI选型,交互设计……
30
 于2015年中,我在github上创建XXL-JOB项目仓库并提交第一个commit,随之进行系统结构设计,UI选型,交互设计……
57
 	- 16、深圳麦亚信科技股份有限公司
57
 	- 16、深圳麦亚信科技股份有限公司
58
 	- 17、上海博莹科技信息技术有限公司
58
 	- 17、上海博莹科技信息技术有限公司
59
 	- 18、中国平安科技有限公司
59
 	- 18、中国平安科技有限公司
60
+	- 19、杭州知时信息科技有限公司
61
+	- 20、博莹科技(上海)有限公司
62
+	- 21、成都依能股份有限责任公司
63
+	- 22、湖南高阳通联信息技术有限公司
60
 	- ……
64
 	- ……
61
 
65
 
62
 欢迎大家的关注和使用,XXL-JOB也将拥抱变化,持续发展。
66
 欢迎大家的关注和使用,XXL-JOB也将拥抱变化,持续发展。
167
 
171
 
168
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/13150738_Fv8v.png "在这里输入图片标题")
172
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/13150738_Fv8v.png "在这里输入图片标题")
169
 
173
 
170
-    ### 执行器JDBC链接:请保持和调度中心JDBC连接配置一致;(执行器 "DbRegistHelper" 和 "DbGlueLoader" 依赖JDBC配置; 推荐将其抽象为RPC远程服务, 可取消对JDBC的依赖)
174
+    ### 执行器JDBC链接:请保持和调度中心JDBC连接配置一致;(执行器 "DbRegistHelper" 依赖JDBC配置;推荐将其抽象为RPC远程服务, 可取消对JDBC的依赖;如不启用执行自动注册功能,也可忽略JDBC配置; )
171
     xxl.job.db.driverClass=com.mysql.jdbc.Driver
175
     xxl.job.db.driverClass=com.mysql.jdbc.Driver
172
     xxl.job.db.url=jdbc:mysql://localhost:3306/xxl-job?useUnicode=true&characterEncoding=UTF-8
176
     xxl.job.db.url=jdbc:mysql://localhost:3306/xxl-job?useUnicode=true&characterEncoding=UTF-8
173
     xxl.job.db.user=root
177
     xxl.job.db.user=root
181
 
185
 
182
 **组件配置**:配置内容如下图所示。
186
 **组件配置**:配置内容如下图所示。
183
 
187
 
184
-![输入图片说明](https://static.oschina.net/uploads/img/201703/13151030_Afad.png "在这里输入图片标题")
188
+![输入图片说明](https://static.oschina.net/uploads/img/201704/27204724_WW5m.png "在这里输入图片标题")
185
 
189
 
186
     1、JobHandler 扫描路径:自动扫描容器中JobHandler;
190
     1、JobHandler 扫描路径:自动扫描容器中JobHandler;
187
-    3、执行器注册器(XxlJobExecutor.registHelper): 默认使用系统提供的 "DbRegistHelper"(依赖JDBC), 推荐将其改为公共的RPC服务
188
-    3、GLUE源码加载器(GlueFactory.glueLoader): 默认使用系统提供的 "DbGlueLoader"(依赖JDBC), 推荐将其改为公共的RPC服务
189
-    4、XXL-JOB公共数据源 "xxlJobDataSource": 仅在启动 "DbRegistHelper" 或 "DbGlueLoader" 时才需要, 否则可删除
191
+    2、执行器注册器(XxlJobExecutor.registHelper): 默认使用系统提供的 "DbRegistHelper"(依赖JDBC), 推荐将其抽象为RPC远程服务, 可取消对JDBC的依赖;如不启用执行自动注册功能,也可忽略JDBC配置; )
192
+    3、XXL-JOB公共数据源 "xxlJobDataSource": 仅在启动 "DbRegistHelper" 或 "DbGlueLoader" 时才需要, 否则可删除
190
 
193
 
191
 **部署项目**:       
194
 **部署项目**:       
192
 至此“执行器”项目已经部署结束。
195
 至此“执行器”项目已经部署结束。
193
 
196
 
194
 #### 2.5 开发第一个任务“Hello World”       
197
 #### 2.5 开发第一个任务“Hello World”       
195
-本示例为新建一个“GLUE模式任务”(“GLUE模式任务”的执行代码支持托管到调度中心在线维护,相比“Bean模式任务”需要在执行器项目开发部署上线,更加简便轻量)。更多有关任务的详细配置,请查看“章节三:任务详解”。
198
+本示例以新建一个 “GLUE模式(Java)” 运行模式的任务为例。更多有关任务的详细配置,请查看“章节三:任务详解”。
199
+( “GLUE模式(Java)”的执行代码托管到调度中心在线维护,相比“Bean模式任务”需要在执行器项目开发部署上线,更加简便轻量)
196
 
200
 
197
 **前提:请确认“调度中心”和“执行器”项目已经成功部署并启动;**
201
 **前提:请确认“调度中心”和“执行器”项目已经成功部署并启动;**
198
 
202
 
199
-- **步骤一(新建任务)**:        
203
+- **步骤一:新建任务**:
200
 登陆调度中心,点击下图所示“新建任务”按钮,新建示例任务。然后,参考下面截图中任务的参数配置,点击保存。
204
 登陆调度中心,点击下图所示“新建任务”按钮,新建示例任务。然后,参考下面截图中任务的参数配置,点击保存。
201
 
205
 
202
-![输入图片说明](https://static.oschina.net/uploads/img/201703/12220807_amrb.png "在这里输入图片标题")
203
-
204
-![输入图片说明](https://static.oschina.net/uploads/img/201703/12220856_rd3R.png "在这里输入图片标题")
205
-
206
-- **步骤二(GLUE任务开发)**:        
207
-请点击下图中所示“GLUE入口按钮”,进入“GLUE编辑器开发界面”,见下图。GLUE任务默认已经初始化了示例任务代码,即打印Hello World。
208
-(GLUE实际上是一段继承自IJobHandler的Java类代码,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务,详细介绍请查看第三章节)
209
-
210
-![输入图片说明](https://static.oschina.net/uploads/img/201610/03200312_EhFJ.png "在这里输入图片标题")
206
+![输入图片说明](https://static.oschina.net/uploads/img/201704/27205910_o8HQ.png "在这里输入图片标题")
211
 
207
 
212
-![输入图片说明](https://static.oschina.net/uploads/img/201703/25124117_hYaV.png "在这里输入图片标题")
208
+![输入图片说明](https://static.oschina.net/uploads/img/201704/27210202_SE2u.png "在这里输入图片标题")
213
 
209
 
214
-- **步骤三(触发执行)**:    
215
-点击下图所示“执行”按钮,可手动触发一次任务执行(通常情况下,通过配置Cron表达式进行任务调度出发)。
210
+- **步骤二:“GLUE模式(Java)” 任务开发**:
211
+请点击任务右侧 “GLUE” 按钮,进入 “GLUE编辑器开发界面” ,见下图。“GLUE模式(Java)” 运行模式的任务默认已经初始化了示例任务代码,即打印Hello World。
212
+( “GLUE模式(Java)” 运行模式的任务实际上是一段继承自IJobHandler的Java类代码,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务,详细介绍请查看第三章节)
216
 
213
 
217
-![输入图片说明](https://static.oschina.net/uploads/img/201703/12221021_uD5l.png "在这里输入图片标题")
214
+![输入图片说明](https://static.oschina.net/uploads/img/201704/27210307_Fgql.png "在这里输入图片标题")
218
 
215
 
219
-- **步骤四(查看日志)**:   
216
+![输入图片说明](https://static.oschina.net/uploads/img/201704/27210314_dNUJ.png "在这里输入图片标题")
220
 
217
 
221
-点击任务右侧“日志”按钮,可前往任务日志界面查看任务日志。
222
-![输入图片说明](https://static.oschina.net/uploads/img/201703/12221130_jYQi.png "在这里输入图片标题")
218
+- **步骤三:触发执行**:
219
+请点击任务右侧 “执行” 按钮,可手动触发一次任务执行(通常情况下,通过配置Cron表达式进行任务调度出发)。
223
 
220
 
221
+- **步骤四:查看日志**: 
222
+请点击任务右侧 “日志” 按钮,可前往任务日志界面查看任务日志。
224
 在任务日志界面中,可查看该任务的历史调度记录以及每一次调度的任务调度信息、执行参数和执行信息。运行中的任务点击右侧的“执行日志”按钮,可进入日志控制台查看实时执行日志。
223
 在任务日志界面中,可查看该任务的历史调度记录以及每一次调度的任务调度信息、执行参数和执行信息。运行中的任务点击右侧的“执行日志”按钮,可进入日志控制台查看实时执行日志。
225
-![输入图片说明](https://static.oschina.net/uploads/img/201703/12221436_c8Ru.png "在这里输入图片标题")
224
+
225
+![输入图片说明](https://static.oschina.net/uploads/img/201704/27211624_E26X.png "在这里输入图片标题")
226
 
226
 
227
 在日志控制台,可以Rolling方式实时查看任务在执行器一侧运行输出的日志信息,实时监控任务进度;
227
 在日志控制台,可以Rolling方式实时查看任务在执行器一侧运行输出的日志信息,实时监控任务进度;
228
-![输入图片说明](https://static.oschina.net/uploads/img/201703/25124816_tvGI.png "在这里输入图片标题")
228
+
229
+![输入图片说明](https://static.oschina.net/uploads/img/201704/27211631_eYrv.png "在这里输入图片标题")
229
 
230
 
230
 ## 三、任务详解
231
 ## 三、任务详解
231
 
232
 
785
 - 4、路由策越优化:循环和LFU路由策略计数器自增无上限问题和首次路由压力集中在首台机器的问题修复;
786
 - 4、路由策越优化:循环和LFU路由策略计数器自增无上限问题和首次路由压力集中在首台机器的问题修复;
786
 
787
 
787
 #### 6.14 版本 V1.7.0 特性 (Coding)
788
 #### 6.14 版本 V1.7.0 特性 (Coding)
788
-- 1、支持脚本JOB(源码或指定路径), 即shell/python/php等, 日志实时输出并支持在线监控;定制JobHandler实现;
789
+- 1、脚本任务:支持以GLUE模式开发和运行脚本任务,包括Shell、Python等类型脚本;
789
 
790
 
790
 
791
 
791
 #### TODO LIST
792
 #### TODO LIST

+ 1 - 0
db/tables_xxl_job.sql 查看文件

169
   `id` int(11) NOT NULL AUTO_INCREMENT,
169
   `id` int(11) NOT NULL AUTO_INCREMENT,
170
   `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
170
   `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
171
   `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
171
   `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
172
+  `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',
172
   `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
173
   `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
173
   `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
174
   `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
174
   `executor_param` varchar(255) DEFAULT NULL COMMENT 'executor_param',
175
   `executor_param` varchar(255) DEFAULT NULL COMMENT 'executor_param',

+ 1 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java 查看文件

50
 
50
 
51
 		// log part-2 param
51
 		// log part-2 param
52
 		//jobLog.setExecutorAddress(executorAddress);
52
 		//jobLog.setExecutorAddress(executorAddress);
53
+		jobLog.setGlueType(jobInfo.getGlueType());
53
 		jobLog.setExecutorHandler(jobInfo.getExecutorHandler());
54
 		jobLog.setExecutorHandler(jobInfo.getExecutorHandler());
54
 		jobLog.setExecutorParam(jobInfo.getExecutorParam());
55
 		jobLog.setExecutorParam(jobInfo.getExecutorParam());
55
 		jobLog.setTriggerTime(new Date());
56
 		jobLog.setTriggerTime(new Date());

+ 11 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java 查看文件

14
 	private int jobGroup;
14
 	private int jobGroup;
15
 	private int jobId;
15
 	private int jobId;
16
 
16
 
17
+	// glueType
18
+	private String glueType;
19
+
17
 	// execute info
20
 	// execute info
18
 	private String executorAddress;
21
 	private String executorAddress;
19
 	private String executorHandler;
22
 	private String executorHandler;
53
 		this.jobId = jobId;
56
 		this.jobId = jobId;
54
 	}
57
 	}
55
 
58
 
59
+	public String getGlueType() {
60
+		return glueType;
61
+	}
62
+
63
+	public void setGlueType(String glueType) {
64
+		this.glueType = glueType;
65
+	}
66
+
56
 	public String getExecutorAddress() {
67
 	public String getExecutorAddress() {
57
 		return executorAddress;
68
 		return executorAddress;
58
 	}
69
 	}

+ 5 - 1
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml 查看文件

9
 		<result column="job_group" property="jobGroup" />
9
 		<result column="job_group" property="jobGroup" />
10
 		<result column="job_id" property="jobId" />
10
 		<result column="job_id" property="jobId" />
11
 
11
 
12
-	    <result column="executor_address" property="executorAddress" />
12
+		<result column="glue_type" property="glueType" />
13
+
14
+		<result column="executor_address" property="executorAddress" />
13
 		<result column="executor_handler" property="executorHandler" />
15
 		<result column="executor_handler" property="executorHandler" />
14
 	    <result column="executor_param" property="executorParam" />
16
 	    <result column="executor_param" property="executorParam" />
15
 	    
17
 	    
27
 		t.id,
29
 		t.id,
28
 		t.job_group,
30
 		t.job_group,
29
 		t.job_id,
31
 		t.job_id,
32
+		t.glue_type,
30
 		t.executor_address,
33
 		t.executor_address,
31
 		t.executor_handler,
34
 		t.executor_handler,
32
 		t.executor_param,
35
 		t.executor_param,
101
 	<update id="updateTriggerInfo">
104
 	<update id="updateTriggerInfo">
102
 		UPDATE XXL_JOB_QRTZ_TRIGGER_LOG
105
 		UPDATE XXL_JOB_QRTZ_TRIGGER_LOG
103
 		SET
106
 		SET
107
+		    `glue_type`= #{glueType},
104
 			`trigger_time`= #{triggerTime},
108
 			`trigger_time`= #{triggerTime},
105
 			`trigger_code`= #{triggerCode},
109
 			`trigger_code`= #{triggerCode},
106
 			`trigger_msg`= #{triggerMsg},
110
 			`trigger_msg`= #{triggerMsg},

+ 1 - 1
xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl 查看文件

170
 
170
 
171
 <#macro commonFooter >
171
 <#macro commonFooter >
172
 	<footer class="main-footer">
172
 	<footer class="main-footer">
173
-        Powered by <b>XXL-JOB</b> 1.6
173
+        Powered by <b>XXL-JOB</b> 1.7
174
 		<div class="pull-right hidden-xs">
174
 		<div class="pull-right hidden-xs">
175
             <strong>Copyright &copy; 2015-${.now?string('yyyy')} &nbsp;
175
             <strong>Copyright &copy; 2015-${.now?string('yyyy')} &nbsp;
176
                 <a href="https://github.com/xuxueli/xxl-job" target="_blank" >github</a>&nbsp;
176
                 <a href="https://github.com/xuxueli/xxl-job" target="_blank" >github</a>&nbsp;

+ 1 - 1
xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/joblog.index.ftl 查看文件

81
                                         <th name="triggerCode" >调度结果</th>
81
                                         <th name="triggerCode" >调度结果</th>
82
                                         <th name="triggerMsg" >调度备注</th>
82
                                         <th name="triggerMsg" >调度备注</th>
83
 					                  	<th name="executorAddress" >执行器地址</th>
83
 					                  	<th name="executorAddress" >执行器地址</th>
84
-                                        <th name="executorHandler" >JobHandler</th>
84
+                                        <th name="glueType" >运行模式</th>
85
 					                  	<th name="executorParam" >任务参数</th>
85
 					                  	<th name="executorParam" >任务参数</th>
86
 					                  	<th name="handleTime" >执行时间</th>
86
 					                  	<th name="handleTime" >执行时间</th>
87
 					                  	<th name="handleCode" >执行结果</th>
87
 					                  	<th name="handleCode" >执行结果</th>

+ 1 - 1
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js 查看文件

56
 							} else if ('GLUE_PYTHON'==row.glueType) {
56
 							} else if ('GLUE_PYTHON'==row.glueType) {
57
 								return "GLUE模式(Python)";
57
 								return "GLUE模式(Python)";
58
 							} else if ('BEAN'==row.glueType) {
58
 							} else if ('BEAN'==row.glueType) {
59
-								return row.executorHandler;
59
+								return "BEAN模式:" + row.executorHandler;
60
 							}
60
 							}
61
 							return row.executorHandler;
61
 							return row.executorHandler;
62
 						}
62
 						}

+ 11 - 2
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js 查看文件

108
 					},
108
 					},
109
 	                { "data": 'executorAddress', "visible" : true},
109
 	                { "data": 'executorAddress', "visible" : true},
110
 					{
110
 					{
111
-						"data": 'executorHandler',
111
+						"data": 'glueType',
112
 						"visible" : true,
112
 						"visible" : true,
113
 						"render": function ( data, type, row ) {
113
 						"render": function ( data, type, row ) {
114
-							return (row.executorHandler)?row.executorHandler:"GLUE模式";
114
+							if ('GLUE_GROOVY'==row.glueType) {
115
+								return "GLUE模式(Java)";
116
+							} else if ('GLUE_SHELL'==row.glueType) {
117
+								return "GLUE模式(Shell)";
118
+							} else if ('GLUE_PYTHON'==row.glueType) {
119
+								return "GLUE模式(Python)";
120
+							} else if ('BEAN'==row.glueType) {
121
+								return "BEAN模式:" + row.executorHandler;
122
+							}
123
+							return row.executorHandler;
115
 						}
124
 						}
116
 					},
125
 					},
117
 	                { "data": 'executorParam', "visible" : true},
126
 	                { "data": 'executorParam', "visible" : true},

+ 2 - 2
xxl-job-executor-example/src/main/resources/applicationcontext-xxl-job.xml 查看文件

28
 		<!-- 执行器端口号 -->
28
 		<!-- 执行器端口号 -->
29
 		<property name="port" value="${xxl.job.executor.port}" />
29
 		<property name="port" value="${xxl.job.executor.port}" />
30
         <property name="appName" value="${xxl.job.executor.appname}" />
30
         <property name="appName" value="${xxl.job.executor.appname}" />
31
-        <!-- 执行器注册器,默认使用系统提供的 "DbRegistHelper", 推荐将其改为公共的RPC服务 -->
31
+        <!-- 执行器注册器 -->
32
         <property name="registHelper" >
32
         <property name="registHelper" >
33
-            <!-- DbRegistHelper, 依赖 "XXL-JOB公共数据源" -->
33
+            <!-- 执行器 "DbRegistHelper" 依赖 "XXL-JOB公共数据源" ;推荐将其抽象为RPC远程服务, 可取消对JDBC的依赖;如不启用执行自动注册功能,也可忽略JDBC配置;  -->
34
             <bean class="com.xxl.job.core.registry.impl.DbRegistHelper" >
34
             <bean class="com.xxl.job.core.registry.impl.DbRegistHelper" >
35
                 <!-- XXL-JOB公共数据源 -->
35
                 <!-- XXL-JOB公共数据源 -->
36
                 <property name="dataSource" ref="xxlJobDataSource" />
36
                 <property name="dataSource" ref="xxlJobDataSource" />