瀏覽代碼

1、新增spring-boot类型执行器example项目;

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

+ 4 - 2
README.md 查看文件

@@ -99,9 +99,9 @@ XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是
99 99
 ![输入图片说明](https://static.oschina.net/uploads/img/201704/25151032_nrJN.png "在这里输入图片标题")
100 100
 
101 101
 ### 1.5 环境
102
-- Servlet/JSP Spec:3.0/2.2
102
+- Servlet/JSP Spec:3.1/2.3
103 103
 - JDK:1.7+
104
-- Tomcat:7+/Jetty8+
104
+- Tomcat:8.5.x+/Jetty9.2+
105 105
 - Mysql:5.6+
106 106
 - Maven:3+
107 107
 
@@ -813,6 +813,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
813 813
 
814 814
 #### 6.14 版本 V1.7.0 特性 (Coding)
815 815
 - 1、脚本任务:支持以GLUE模式开发和运行脚本任务,包括Shell、Python等类型脚本;
816
+- 2、新增spring-boot类型执行器example项目;
817
+- 3、升级jetty版本至9.2;
816 818
 - 2、执行器移除GlueLoader依赖改为推送方式,GLUE源码加载不再依赖JDBC;
817 819
 - 3、登陆拦截Redirect时获取项目名,解决非根据目录发布时跳转404问题;
818 820
 

+ 2 - 1
pom.xml 查看文件

@@ -14,7 +14,8 @@
14 14
 		<module>xxl-job-core</module>
15 15
 		<module>xxl-job-admin</module>
16 16
 		<module>xxl-job-executor-example</module>
17
-	</modules>
17
+        <module>xxl-job-executor-springboot-example</module>
18
+    </modules>
18 19
 
19 20
 	<build>
20 21
 		<plugins>

+ 1 - 1
xxl-job-core/pom.xml 查看文件

@@ -34,7 +34,7 @@
34 34
 		<dependency>
35 35
 			<groupId>org.eclipse.jetty</groupId>
36 36
 			<artifactId>jetty-server</artifactId>
37
-			<version>8.2.0.v20160908</version>
37
+			<version>9.2.21.v20170120</version>
38 38
 		</dependency>
39 39
 
40 40
 		<!-- slf4j -->

+ 12 - 11
xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/server/JettyServer.java 查看文件

@@ -5,8 +5,8 @@ import com.xxl.job.core.thread.ExecutorRegistryThread;
5 5
 import org.eclipse.jetty.server.Connector;
6 6
 import org.eclipse.jetty.server.Handler;
7 7
 import org.eclipse.jetty.server.Server;
8
+import org.eclipse.jetty.server.ServerConnector;
8 9
 import org.eclipse.jetty.server.handler.HandlerCollection;
9
-import org.eclipse.jetty.server.nio.SelectChannelConnector;
10 10
 import org.eclipse.jetty.util.thread.ExecutorThreadPool;
11 11
 import org.slf4j.Logger;
12 12
 import org.slf4j.LoggerFactory;
@@ -24,21 +24,22 @@ public class JettyServer {
24 24
 		thread = new Thread(new Runnable() {
25 25
 			@Override
26 26
 			public void run() {
27
-				server = new Server();
28
-				server.setThreadPool(new ExecutorThreadPool(200, 200, 30000));	// 非阻塞
29
-				
30
-				// connector
31
-				SelectChannelConnector connector = new SelectChannelConnector();
27
+
28
+				// The Server
29
+				server = new Server(new ExecutorThreadPool());  // 非阻塞
30
+
31
+				// HTTP connector
32
+				ServerConnector connector = new ServerConnector(server);
32 33
 				connector.setPort(port);
33
-				connector.setMaxIdleTime(30000);
34
-				server.setConnectors(new Connector[] { connector });
35
-				
36
-				// handler
37
-				HandlerCollection handlerc =new HandlerCollection();  
34
+				server.setConnectors(new Connector[]{connector});
35
+
36
+				// Set a handler
37
+				HandlerCollection handlerc =new HandlerCollection();
38 38
 				handlerc.setHandlers(new Handler[]{new JettyServerHandler()});
39 39
 				server.setHandler(handlerc);
40 40
 
41 41
 				try {
42
+					// Start the server
42 43
 					server.start();
43 44
 					logger.info(">>>>>>>>>>>> xxl-job jetty server start success at port:{}.", port);
44 45
 					ExecutorRegistryThread.getInstance().start(port, ip, appName, registHelper);

+ 101 - 0
xxl-job-executor-springboot-example/pom.xml 查看文件

@@ -0,0 +1,101 @@
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
+    <modelVersion>4.0.0</modelVersion>
6
+    <parent>
7
+        <groupId>com.xuxueli</groupId>
8
+        <artifactId>xxl-job</artifactId>
9
+        <version>1.7.0-SNAPSHOT</version>
10
+    </parent>
11
+    <artifactId>xxl-job-executor-springboot-example</artifactId>
12
+    <packaging>jar</packaging>
13
+    <name>xxl-job-executor-springboot-example</name>
14
+    <description>Example executor project for spring boot</description>
15
+
16
+    <properties>
17
+        <xxl-job.version>1.7.0-SNAPSHOT</xxl-job.version>
18
+        <!--<spring-boot.version>1.5.3.RELEASE</spring-boot.version>-->
19
+        <spring-boot.version>1.3.8.RELEASE</spring-boot.version>
20
+
21
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
22
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
23
+        <java.version>1.7</java.version>
24
+    </properties>
25
+
26
+    <dependencyManagement>
27
+        <dependencies>
28
+            <dependency>
29
+                <!-- Import dependency management from Spring Boot (依赖管理:继承一些默认的依赖,工程需要依赖的jar包的管理,申明其他dependency的时候就不需要version) -->
30
+                <groupId>org.springframework.boot</groupId>
31
+                <artifactId>spring-boot-starter-parent</artifactId>
32
+                <version>${spring-boot.version}</version>
33
+                <type>pom</type>
34
+                <scope>import</scope>
35
+            </dependency>
36
+        </dependencies>
37
+    </dependencyManagement>
38
+
39
+    <dependencies>
40
+        <dependency>
41
+            <groupId>org.springframework.boot</groupId>
42
+            <artifactId>spring-boot-starter</artifactId>
43
+            <exclusions>
44
+                <exclusion>
45
+                    <groupId>org.springframework.boot</groupId>
46
+                    <artifactId>spring-boot-starter-logging</artifactId>
47
+                </exclusion>
48
+            </exclusions>
49
+        </dependency>
50
+
51
+        <dependency>
52
+            <groupId>org.springframework.boot</groupId>
53
+            <artifactId>spring-boot-starter-log4j</artifactId>
54
+        </dependency>
55
+
56
+        <!-- spring-boot-starter-web (提供了对web的支持,包含了spring webmvc和tomcat等web开发的特性) -->
57
+        <dependency>
58
+            <groupId>org.springframework.boot</groupId>
59
+            <artifactId>spring-boot-starter-web</artifactId>
60
+        </dependency>
61
+
62
+        <dependency>
63
+            <groupId>org.springframework.boot</groupId>
64
+            <artifactId>spring-boot-starter-test</artifactId>
65
+            <scope>test</scope>
66
+        </dependency>
67
+
68
+        <!-- c3p0 -->
69
+        <dependency>
70
+            <groupId>com.mchange</groupId>
71
+            <artifactId>c3p0</artifactId>
72
+            <version>0.9.5.2</version>
73
+        </dependency>
74
+        <!-- mysql-connector -->
75
+        <dependency>
76
+            <groupId>mysql</groupId>
77
+            <artifactId>mysql-connector-java</artifactId>
78
+            <version>5.1.29</version>
79
+        </dependency>
80
+
81
+        <!-- xxl-job-core -->
82
+        <dependency>
83
+            <groupId>com.xuxueli</groupId>
84
+            <artifactId>xxl-job-core</artifactId>
85
+            <version>${xxl-job.version}</version>
86
+        </dependency>
87
+
88
+    </dependencies>
89
+
90
+    <build>
91
+        <plugins>
92
+            <!-- spring-boot-maven-plugin (提供了直接运行项目的插件:如果是通过parent方式继承spring-boot-starter-parent则不用此插件) -->
93
+            <plugin>
94
+                <groupId>org.springframework.boot</groupId>
95
+                <artifactId>spring-boot-maven-plugin</artifactId>
96
+            </plugin>
97
+        </plugins>
98
+    </build>
99
+
100
+
101
+</project>

+ 13 - 0
xxl-job-executor-springboot-example/src/main/java/com/xxl/job/executor/Application.java 查看文件

@@ -0,0 +1,13 @@
1
+package com.xxl.job.executor;
2
+
3
+import org.springframework.boot.SpringApplication;
4
+import org.springframework.boot.autoconfigure.SpringBootApplication;
5
+
6
+@SpringBootApplication
7
+public class Application {
8
+
9
+	public static void main(String[] args) {
10
+        SpringApplication.run(Application.class, args);
11
+	}
12
+
13
+}

+ 11 - 0
xxl-job-executor-springboot-example/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java 查看文件

@@ -0,0 +1,11 @@
1
+package com.xxl.job.executor.core.config;
2
+
3
+import org.springframework.context.annotation.Configuration;
4
+import org.springframework.context.annotation.ImportResource;
5
+
6
+
7
+@Configuration
8
+@ImportResource("classpath:applicationcontext-xxl-job.xml")
9
+public class XxlJobConfig {
10
+
11
+}

+ 18 - 0
xxl-job-executor-springboot-example/src/main/java/com/xxl/job/executor/mvc/handler/IndexController.java 查看文件

@@ -0,0 +1,18 @@
1
+package com.xxl.job.executor.mvc.handler;
2
+
3
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
4
+import org.springframework.stereotype.Controller;
5
+import org.springframework.web.bind.annotation.RequestMapping;
6
+import org.springframework.web.bind.annotation.ResponseBody;
7
+
8
+@Controller
9
+@EnableAutoConfiguration
10
+public class IndexController {
11
+
12
+    @RequestMapping("/")
13
+    @ResponseBody
14
+    String index() {
15
+        return "xxl job running.";
16
+    }
17
+
18
+}

+ 39 - 0
xxl-job-executor-springboot-example/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java 查看文件

@@ -0,0 +1,39 @@
1
+package com.xxl.job.executor.service.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.handler.annotation.JobHander;
6
+import org.slf4j.Logger;
7
+import org.slf4j.LoggerFactory;
8
+import org.springframework.stereotype.Service;
9
+
10
+import java.util.concurrent.TimeUnit;
11
+
12
+
13
+/**
14
+ * 任务Handler的一个Demo(Bean模式)
15
+ * 
16
+ * 开发步骤:
17
+ * 1、继承 “IJobHandler” ;
18
+ * 2、装配到Spring,例如加 “@Service” 注解;
19
+ * 3、加 “@JobHander” 注解,注解value值为新增任务生成的JobKey的值;多个JobKey用逗号分割;
20
+ * 
21
+ * @author xuxueli 2015-12-19 19:43:36
22
+ */
23
+@JobHander(value="demoJobHandler")
24
+@Service
25
+public class DemoJobHandler extends IJobHandler {
26
+	private static transient Logger logger = LoggerFactory.getLogger(DemoJobHandler.class);
27
+	
28
+	@Override
29
+	public ReturnT<String> execute(String... params) throws Exception {
30
+		logger.info("XXL-JOB, Hello World.");
31
+		
32
+		for (int i = 0; i < 5; i++) {
33
+			logger.info("beat at:{}", i);
34
+			TimeUnit.SECONDS.sleep(2);
35
+		}
36
+		return ReturnT.SUCCESS;
37
+	}
38
+	
39
+}

+ 1 - 0
xxl-job-executor-springboot-example/src/main/resources/application.properties 查看文件

@@ -0,0 +1 @@
1
+server.port=8081

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

@@ -0,0 +1,59 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<beans xmlns="http://www.springframework.org/schema/beans"
3
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+       xmlns:context="http://www.springframework.org/schema/context"
5
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
6
+           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
7
+           http://www.springframework.org/schema/context
8
+           http://www.springframework.org/schema/context/spring-context-3.0.xsd">
9
+
10
+	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
11
+		<property name="fileEncoding" value="utf-8" />
12
+		<property name="locations">
13
+			<list>
14
+				<value>classpath*:xxl-job-executor.properties</value>
15
+			</list>
16
+		</property>
17
+	</bean>
18
+
19
+    <!-- ********************************* 基础配置 ********************************* -->
20
+
21
+	<!-- 配置01、JobHandler 扫描路径 -->
22
+	<context:component-scan base-package="com.xxl.job.executor.service.jobhandler" />
23
+
24
+	<!-- 配置02、执行器 -->
25
+	<bean id="xxlJobExecutor" class="com.xxl.job.core.executor.XxlJobExecutor" init-method="start" destroy-method="destroy" >
26
+		<!-- 执行器IP[选填],为空则自动获取 -->
27
+		<property name="ip" value="${xxl.job.executor.ip}" />
28
+		<!-- 执行器端口号 -->
29
+		<property name="port" value="${xxl.job.executor.port}" />
30
+        <property name="appName" value="${xxl.job.executor.appname}" />
31
+        <!-- 执行器注册器 -->
32
+        <property name="registHelper" >
33
+            <!-- 执行器 "DbRegistHelper" 依赖 "XXL-JOB公共数据源" ;推荐将其抽象为RPC远程服务, 可取消对JDBC的依赖;如不启用执行自动注册功能,也可忽略JDBC配置;  -->
34
+            <bean class="com.xxl.job.core.registry.impl.DbRegistHelper" >
35
+                <!-- XXL-JOB公共数据源 -->
36
+                <property name="dataSource" ref="xxlJobDataSource" />
37
+            </bean>
38
+        </property>
39
+	</bean>
40
+
41
+    <!-- ********************************* "XXL-JOB公共数据源" 配置, 仅在启动 "DbRegistHelper" 时才需要, 否则可删除 ********************************* -->
42
+
43
+	<!-- 配置03、XXL-JOB公共数据源 -->
44
+	<bean id="xxlJobDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
45
+		<property name="driverClass" value="${xxl.job.db.driverClass}" />
46
+		<property name="jdbcUrl" value="${xxl.job.db.url}" />
47
+		<property name="user" value="${xxl.job.db.user}" />
48
+		<property name="password" value="${xxl.job.db.password}" />
49
+		<property name="initialPoolSize" value="3" />
50
+		<property name="minPoolSize" value="2" />
51
+		<property name="maxPoolSize" value="10" />
52
+		<property name="maxIdleTime" value="60" />
53
+		<property name="acquireRetryDelay" value="1000" />
54
+		<property name="acquireRetryAttempts" value="10" />
55
+		<property name="preferredTestQuery" value="SELECT 1" />
56
+	</bean>
57
+
58
+
59
+</beans>

+ 50 - 0
xxl-job-executor-springboot-example/src/main/resources/log4j.xml 查看文件

@@ -0,0 +1,50 @@
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-springboot-example [%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-springboot-example.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-springboot-example [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/>
18
+        </layout>
19
+    </appender>
20
+    
21
+    <appender name="xxl-job" class="com.xxl.job.core.log.XxlJobFileAppender">
22
+        <param name="filePath" value="/data/applogs/xxl-job/jobhandler/"/>
23
+        <!--<param name="append" value="true"/>-->
24
+        <!--<param name="encoding" value="UTF-8"/>-->
25
+        <layout class="org.apache.log4j.PatternLayout">
26
+            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} xxl-job-executor-springboot-example [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/>
27
+        </layout>
28
+    </appender>
29
+
30
+
31
+    <logger name="com.xxl.job.core" additivity="false">
32
+    	<level value="INFO" />
33
+        <appender-ref ref="CONSOLE" />
34
+        <appender-ref ref="FILE" />
35
+        <appender-ref ref="xxl-job"/>
36
+    </logger>
37
+    <logger name="com.xxl.job.executor.service.jobhandler" additivity="false">
38
+    	<level value="INFO" />
39
+        <appender-ref ref="CONSOLE" />
40
+        <appender-ref ref="FILE" />
41
+        <appender-ref ref="xxl-job"/>
42
+    </logger>
43
+    <root>
44
+        <level value="INFO" />
45
+        <appender-ref ref="CONSOLE" />
46
+        <appender-ref ref="FILE" />
47
+        <appender-ref ref="xxl-job"/>
48
+    </root>
49
+
50
+</log4j:configuration>

+ 10 - 0
xxl-job-executor-springboot-example/src/main/resources/xxl-job-executor.properties 查看文件

@@ -0,0 +1,10 @@
1
+### xxl-job db
2
+xxl.job.db.driverClass=com.mysql.jdbc.Driver
3
+xxl.job.db.url=jdbc:mysql://localhost:3306/xxl-job?useUnicode=true&characterEncoding=UTF-8
4
+xxl.job.db.user=root
5
+xxl.job.db.password=root_pwd
6
+
7
+### xxl-job executor address
8
+xxl.job.executor.appname=xxl-job-executor-example
9
+xxl.job.executor.ip=
10
+xxl.job.executor.port=9999

+ 19 - 0
xxl-job-executor-springboot-example/src/test/java/com/xxl/job/executor/test/XxlJobExecutorExampleBootApplicationTests.java 查看文件

@@ -0,0 +1,19 @@
1
+package com.xxl.job.executor.test;
2
+
3
+import com.xxl.job.executor.Application;
4
+import org.junit.Test;
5
+import org.junit.runner.RunWith;
6
+import org.springframework.boot.test.SpringApplicationConfiguration;
7
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8
+import org.springframework.test.context.web.WebAppConfiguration;
9
+
10
+@RunWith(SpringJUnit4ClassRunner.class)
11
+@SpringApplicationConfiguration(classes = Application.class)
12
+@WebAppConfiguration
13
+public class XxlJobExecutorExampleBootApplicationTests {
14
+
15
+	@Test
16
+	public void contextLoads() {
17
+	}
18
+
19
+}