Przeglądaj źródła

新增JFinal类型执行器sample示例项目;

xuxueli 8 lat temu
rodzic
commit
0045d1e34a

+ 12 - 8
doc/XXL-JOB官方文档.md Wyświetl plik

@@ -155,9 +155,11 @@ XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是
155 155
 
156 156
     xxl-job-admin:调度中心
157 157
     xxl-job-core:公共依赖
158
-    xxl-job-executor:执行器Example项目
159
-        :xxl-job-executor-sample-spring:执行器Example,Spring版本(可直接使用执行器Example,也可以将现有项目改造成执行器使用)
160
-        :xxl-job-executor-sample-springboot:执行器Example,Springboot版本
158
+    xxl-job-executor:执行器Sample项目,可参考并快速搭建执行器项目
159
+        :xxl-job-executor-sample-spring:执行器Sample示例,Spring版本(可直接使用执行器Sample,也可以将现有项目改造成执行器使用)
160
+        :xxl-job-executor-sample-springboot:执行器Sample示例,Springboot版本
161
+        :xxl-job-executor-sample-jfinal:执行器Sample示例,JFinal版本
162
+        
161 163
 
162 164
 ### 2.3 配置部署“调度中心”
163 165
 
@@ -210,7 +212,7 @@ XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是
210 212
 
211 213
 ### 2.4 配置部署“执行器项目”
212 214
 
213
-    “执行器”项目:xxl-job-executor-sample-spring (如新建执行器项目,可参考该Example执行器项目的配置步骤;)
215
+    “执行器”项目:xxl-job-executor-sample-spring (如新建执行器项目,可参考该Sample示例执行器项目的配置步骤;)
214 216
     作用:负责接收“调度中心”的调度并执行;
215 217
     
216 218
 #### 步骤一:maven依赖
@@ -247,10 +249,11 @@ XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是
247 249
     2、执行器Excutor配置:执行器核心配置;
248 250
 
249 251
 #### 步骤四:部署执行器项目:
250
-如果已经正确进行上述配置,可将执行器项目编译打部署,系统提供两个执行器example项目,选择其中一个即可,各自的部署方式如下。
252
+如果已经正确进行上述配置,可将执行器项目编译打部署,系统提供三个执行器Sample示例项目,选择其中一个即可,各自的部署方式如下。
251 253
 
252 254
     xxl-job-executor-sample-spring:项目编译打包成WAR包,并部署到tomcat中。
253 255
     xxl-job-executor-sample-springboot:项目编译打包成springboot类型的可执行JAR包,命令启动即可;
256
+    xxl-job-executor-sample-jfinal:项目编译打包成WAR包
254 257
 
255 258
 至此“执行器”项目已经部署结束。
256 259
 
@@ -338,7 +341,7 @@ XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是
338 341
     - 1、 新建一个继承com.xxl.job.core.handler.IJobHandler的Java类;
339 342
     - 2、 该类被Spring容器扫描为Bean实例,如加“@Component”注解;
340 343
     - 3、 添加 “@JobHander(value="自定义jobhandler名称")”注解,注解的value值为自定义的JobHandler名称,该名称对应的是调度中心新建任务的JobHandler属性的值。
341
-    (可参考Example执行器中的DemoJobHandler,见下图)
344
+    (可参考Sample示例执行器中的DemoJobHandler,见下图)
342 345
 
343 346
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/23232347_oLlM.png "在这里输入图片标题")
344 347
 
@@ -496,7 +499,7 @@ try{
496 499
     - /db :“调度数据库”建表脚本
497 500
     - /xxl-job-admin :调度中心,项目源码
498 501
     - /xxl-job-core :公共Jar依赖
499
-    - /xxl-job-executor-samples :执行器,Example项目(大家可以在该项目上进行开发,也可以将现有项目改造生成执行器项目)
502
+    - /xxl-job-executor-samples :执行器,Sample示例项目(大家可以在该项目上进行开发,也可以将现有项目改造生成执行器项目)
500 503
 
501 504
 #### 5.2 “调度数据库”配置
502 505
 XXL-JOB调度模块基于Quartz集群实现,其“调度数据库”是在Quartz的11张集群mysql表基础上扩展而成。
@@ -719,7 +722,7 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过
719 722
 
720 723
 "分片广播" 以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
721 724
 
722
-"分片广播" 和普通任务开发流程一致,不同之处在于可以可以获取分片参数,获取分片参数对象的代码如下(可参考example执行器中的示例任务"ShardingJobHandler" ):
725
+"分片广播" 和普通任务开发流程一致,不同之处在于可以可以获取分片参数,获取分片参数对象的代码如下(可参考Sample示例执行器中的示例任务"ShardingJobHandler" ):
723 726
 
724 727
     ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
725 728
     
@@ -948,6 +951,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
948 951
 #### 6.18 版本 V1.8.2 特性[Coding]
949 952
 - 1、解决执行器回调URL不支持配置HTTPS时问题;
950 953
 - 2、规范项目目录,方便扩展多执行器;
954
+- 3、新增JFinal类型执行器sample示例项目;
951 955
 
952 956
 #### TODO LIST
953 957
 - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;

+ 1 - 0
xxl-job-executor-samples/pom.xml Wyświetl plik

@@ -13,6 +13,7 @@
13 13
     <modules>
14 14
         <module>xxl-job-executor-sample-spring</module>
15 15
         <module>xxl-job-executor-sample-springboot</module>
16
+        <module>xxl-job-executor-sample-jfinal</module>
16 17
     </modules>
17 18
 
18 19
 </project>

+ 36 - 0
xxl-job-executor-samples/xxl-job-executor-sample-jfinal/pom.xml Wyświetl plik

@@ -0,0 +1,36 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <parent>
6
+        <artifactId>xxl-job-executor-samples</artifactId>
7
+        <groupId>com.xuxueli</groupId>
8
+        <version>1.8.2-SNAPSHOT</version>
9
+    </parent>
10
+    <modelVersion>4.0.0</modelVersion>
11
+    <artifactId>xxl-job-executor-sample-jfinal</artifactId>
12
+    <packaging>war</packaging>
13
+
14
+    <dependencies>
15
+        <!-- jfinal -->
16
+        <dependency>
17
+            <groupId>com.jfinal</groupId>
18
+            <artifactId>jfinal</artifactId>
19
+            <version>2.0</version>
20
+        </dependency>
21
+
22
+        <!-- xxl-job -->
23
+        <dependency>
24
+            <groupId>com.xuxueli</groupId>
25
+            <artifactId>xxl-job-core</artifactId>
26
+            <version>${project.parent.version}</version>
27
+        </dependency>
28
+
29
+        <dependency>
30
+            <groupId>org.slf4j</groupId>
31
+            <artifactId>slf4j-log4j12</artifactId>
32
+            <version>${slf4j-api.version}</version>
33
+        </dependency>
34
+    </dependencies>
35
+
36
+</project>

+ 84 - 0
xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/config/JFinalCoreConfig.java Wyświetl plik

@@ -0,0 +1,84 @@
1
+package com.xuxueli.executor.sample.jfinal.config;
2
+
3
+import com.jfinal.config.*;
4
+import com.jfinal.kit.Prop;
5
+import com.jfinal.kit.PropKit;
6
+import com.xuxueli.executor.sample.jfinal.controller.IndexController;
7
+import com.xuxueli.executor.sample.jfinal.jobhandler.DemoJobHandler;
8
+import com.xuxueli.executor.sample.jfinal.jobhandler.ShardingJobHandler;
9
+import com.xxl.job.core.executor.XxlJobExecutor;
10
+import org.slf4j.Logger;
11
+import org.slf4j.LoggerFactory;
12
+
13
+/**
14
+ * @author xuxueli 2017-08-11 14:17:41
15
+ */
16
+public class JFinalCoreConfig extends JFinalConfig {
17
+	private Logger logger = LoggerFactory.getLogger(JFinalCoreConfig.class);
18
+
19
+	// ---------------------- xxl-job executor ----------------------
20
+	XxlJobExecutor xxlJobExecutor = null;
21
+	private void initXxlJobExecutor() {
22
+		// registry jobhandler
23
+		XxlJobExecutor.registJobHandler("demoJobHandler", new DemoJobHandler());
24
+		XxlJobExecutor.registJobHandler("shardingJobHandler", new ShardingJobHandler());
25
+
26
+		// load executor prop
27
+		Prop xxlJobProp = PropKit.use("xxl-job-executor.properties");
28
+
29
+		// init executor
30
+		xxlJobExecutor = new XxlJobExecutor();
31
+		xxlJobExecutor.setIp(xxlJobProp.get("xxl.job.executor.ip"));
32
+		xxlJobExecutor.setPort(xxlJobProp.getInt("xxl.job.executor.port"));
33
+		xxlJobExecutor.setAppName(xxlJobProp.get("xxl.job.executor.appname"));
34
+		xxlJobExecutor.setAdminAddresses(xxlJobProp.get("xxl.job.admin.addresses"));
35
+		xxlJobExecutor.setLogPath(xxlJobProp.get("xxl.job.executor.logpath"));
36
+		xxlJobExecutor.setAccessToken(xxlJobProp.get("xxl.job.accessToken"));
37
+
38
+		// start executor
39
+		try {
40
+			xxlJobExecutor.start();
41
+		} catch (Exception e) {
42
+			logger.error(e.getMessage(), e);
43
+		}
44
+	}
45
+	private void destoryXxlJobExecutor() {
46
+		if (xxlJobExecutor != null) {
47
+			xxlJobExecutor.destroy();
48
+		}
49
+	}
50
+
51
+	// ---------------------- jfinal ----------------------
52
+
53
+	public void configRoute(Routes route) {
54
+		route.add("/", IndexController.class);
55
+	}
56
+
57
+	@Override
58
+	public void afterJFinalStart() {
59
+		initXxlJobExecutor();
60
+	}
61
+
62
+	@Override
63
+	public void beforeJFinalStop() {
64
+		destoryXxlJobExecutor();
65
+	}
66
+
67
+	public void configConstant(Constants constants) {
68
+
69
+	}
70
+
71
+	public void configPlugin(Plugins plugins) {
72
+
73
+	}
74
+
75
+	public void configInterceptor(Interceptors interceptors) {
76
+
77
+	}
78
+
79
+	public void configHandler(Handlers handlers) {
80
+
81
+	}
82
+
83
+
84
+}

+ 10 - 0
xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/controller/IndexController.java Wyświetl plik

@@ -0,0 +1,10 @@
1
+package com.xuxueli.executor.sample.jfinal.controller;
2
+
3
+import com.jfinal.core.Controller;
4
+
5
+public class IndexController extends Controller {
6
+
7
+	public void index(){
8
+		renderText("xxl job executor running.");
9
+	}
10
+}

+ 33 - 0
xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/jobhandler/DemoJobHandler.java Wyświetl plik

@@ -0,0 +1,33 @@
1
+package com.xuxueli.executor.sample.jfinal.jobhandler;
2
+
3
+import com.xxl.job.core.biz.model.ReturnT;
4
+import com.xxl.job.core.handler.IJobHandler;
5
+import com.xxl.job.core.log.XxlJobLogger;
6
+
7
+import java.util.concurrent.TimeUnit;
8
+
9
+
10
+/**
11
+ * 任务Handler的一个Demo(Bean模式)
12
+ *
13
+ * 开发步骤:
14
+ * 1、继承 “IJobHandler” ;
15
+ * 2、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
16
+ * 3、在 "JFinalCoreConfig" 中注册,执行Jobhandler名称;
17
+ *
18
+ * @author xuxueli 2015-12-19 19:43:36
19
+ */
20
+public class DemoJobHandler extends IJobHandler {
21
+
22
+	@Override
23
+	public ReturnT<String> execute(String... params) throws Exception {
24
+		XxlJobLogger.log("XXL-JOB, Hello World.");
25
+
26
+		for (int i = 0; i < 5; i++) {
27
+			XxlJobLogger.log("beat at:" + i);
28
+			TimeUnit.SECONDS.sleep(2);
29
+		}
30
+		return ReturnT.SUCCESS;
31
+	}
32
+
33
+}

+ 35 - 0
xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/java/com/xuxueli/executor/sample/jfinal/jobhandler/ShardingJobHandler.java Wyświetl plik

@@ -0,0 +1,35 @@
1
+package com.xuxueli.executor.sample.jfinal.jobhandler;
2
+
3
+import com.xxl.job.core.biz.model.ReturnT;
4
+import com.xxl.job.core.handler.IJobHandler;
5
+import com.xxl.job.core.log.XxlJobLogger;
6
+import com.xxl.job.core.util.ShardingUtil;
7
+
8
+
9
+/**
10
+ * 分片广播任务
11
+ *
12
+ * @author xuxueli 2017-07-25 20:56:50
13
+ */
14
+public class ShardingJobHandler extends IJobHandler {
15
+
16
+	@Override
17
+	public ReturnT<String> execute(String... params) throws Exception {
18
+
19
+		// 分片参数
20
+		ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
21
+		XxlJobLogger.log("分片参数:当前分片序号 = {0}, 总分片数 = {1}", shardingVO.getIndex(), shardingVO.getTotal());
22
+
23
+		// 业务逻辑
24
+		for (int i = 0; i < shardingVO.getTotal(); i++) {
25
+			if (i == shardingVO.getIndex()) {
26
+				XxlJobLogger.log("第 {0} 片, 命中分片开始处理", i);
27
+			} else {
28
+				XxlJobLogger.log("第 {0} 片, 忽略", i);
29
+			}
30
+		}
31
+
32
+		return ReturnT.SUCCESS;
33
+	}
34
+	
35
+}

+ 27 - 0
xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/resources/log4j.xml Wyświetl plik

@@ -0,0 +1,27 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">
3
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" threshold="null" debug="null">
4
+
5
+	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
6
+		<param name="Target" value="System.out" />
7
+		<layout class="org.apache.log4j.PatternLayout">
8
+            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} xxl-job-executor-sample-jfinal [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/>
9
+		</layout>
10
+	</appender>
11
+	
12
+    <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
13
+        <param name="file" value="/data/applogs/xxl-job/xxl-job-executor-sample-jfinal.log"/>
14
+        <param name="append" value="true"/>
15
+        <param name="encoding" value="UTF-8"/>
16
+        <layout class="org.apache.log4j.PatternLayout">
17
+            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} xxl-job-executor-sample-jfinal [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/>
18
+        </layout>
19
+    </appender>
20
+
21
+    <root>
22
+        <level value="INFO" />
23
+        <appender-ref ref="CONSOLE" />
24
+        <appender-ref ref="FILE" />
25
+    </root>
26
+
27
+</log4j:configuration>

+ 13 - 0
xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/resources/xxl-job-executor.properties Wyświetl plik

@@ -0,0 +1,13 @@
1
+### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
2
+xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
3
+
4
+### xxl-job executor address
5
+xxl.job.executor.appname=xxl-job-executor-sample
6
+xxl.job.executor.ip=
7
+xxl.job.executor.port=9997
8
+
9
+### xxl-job log path
10
+xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler/
11
+
12
+### xxl-job, access token
13
+xxl.job.accessToken=

+ 22 - 0
xxl-job-executor-samples/xxl-job-executor-sample-jfinal/src/main/webapp/WEB-INF/web.xml Wyświetl plik

@@ -0,0 +1,22 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
4
+	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
5
+	id="WebApp_ID" version="2.5">
6
+	<display-name>jfinal-demo</display-name>
7
+
8
+	<!-- jfinal -->
9
+	<filter>
10
+		<filter-name>jfinal</filter-name>
11
+		<filter-class>com.jfinal.core.JFinalFilter</filter-class>
12
+		<init-param>
13
+			<param-name>configClass</param-name>
14
+			<param-value>com.xuxueli.executor.sample.jfinal.config.JFinalCoreConfig</param-value>
15
+		</init-param>
16
+	</filter>
17
+	<filter-mapping>
18
+		<filter-name>jfinal</filter-name>
19
+		<url-pattern>/*</url-pattern>
20
+	</filter-mapping>
21
+
22
+</web-app>