Przeglądaj źródła

新增无框架执行器Sample示例项目 "xxl-job-executor-sample-frameless"。不依赖第三方框架,只需main方法即可启动运行执行器;

xuxueli 6 lat temu
rodzic
commit
af6c46743f

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

@@ -1328,11 +1328,12 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
1328 1328
 - 2、底层通讯组件迁移至 xxl-rpc;
1329 1329
 - 3、IP获取逻辑优化,优先遍历网卡来获取可用IP;
1330 1330
 - 4、任务新增的API服务接口返回任务ID,方便调用方实用;
1331
-- 5、[迭代中]任务状态与quartz解耦,降低quartz调度压力,仅NORMAL状态任务绑定quartz;
1332
-- 6、[迭代中]新增任务默认运行状态,任务更新时运行状态保持不变;
1333
-- 7、[迭代中]原生提供通用命令行任务Handler(Bean任务,"CommandJobHandler");业务方只需要提供命令行即可,可执行任意命令;
1334
-- 8、[迭代中]cron在线生成工具,如 "cronboot/cron.qqe2";
1335
-- 9、[迭代中]docker镜像,并且推送docker镜像到中央仓库,更进一步实现产品开箱即用;
1331
+- 5、新增无框架执行器Sample示例项目 "xxl-job-executor-sample-frameless"。不依赖第三方框架,只需main方法即可启动运行执行器;
1332
+- 6、[迭代中]任务状态与quartz解耦,降低quartz调度压力,仅NORMAL状态任务绑定quartz;
1333
+- 7、[迭代中]新增任务默认运行状态,任务更新时运行状态保持不变;
1334
+- 8、[迭代中]原生提供通用命令行任务Handler(Bean任务,"CommandJobHandler");业务方只需要提供命令行即可,可执行任意命令;
1335
+- 9、[迭代中]cron在线生成工具,如 "cronboot/cron.qqe2";
1336
+- 10、[迭代中]docker镜像,并且推送docker镜像到中央仓库,更进一步实现产品开箱即用;
1336 1337
 
1337 1338
 
1338 1339
 ### TODO LIST
@@ -1359,8 +1360,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
1359 1360
 - 21、批量触发支持,添加参数 "org.quartz.scheduler.batchTriggerAcquisitionMaxCount: 50";
1360 1361
 - 22、失败重试间隔;
1361 1362
 - 23、Release发布时,一同发布调度中心安装包,真正实现开箱即用;
1362
-- 24、[迭代中]任务权限管理:执行器为粒度分配权限,核心操作校验权限;
1363
-- 25、[迭代中]SimpleTrigger 支持;
1363
+- 24、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
1364
+- 25、SimpleTrigger 支持;
1364 1365
 
1365 1366
 
1366 1367
 ## 七、其他

+ 29 - 18
xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java Wyświetl plik

@@ -10,7 +10,7 @@ import com.xxl.job.core.thread.ExecutorRegistryThread;
10 10
 import com.xxl.job.core.thread.JobLogFileCleanThread;
11 11
 import com.xxl.job.core.thread.JobThread;
12 12
 import com.xxl.job.core.thread.TriggerCallbackThread;
13
-import com.xxl.rpc.registry.impl.LocalServiceRegistry;
13
+import com.xxl.rpc.registry.ServiceRegistry;
14 14
 import com.xxl.rpc.remoting.invoker.XxlRpcInvokerFactory;
15 15
 import com.xxl.rpc.remoting.invoker.call.CallType;
16 16
 import com.xxl.rpc.remoting.invoker.reference.XxlRpcReferenceBean;
@@ -25,9 +25,7 @@ import org.springframework.beans.BeansException;
25 25
 import org.springframework.context.ApplicationContext;
26 26
 import org.springframework.context.ApplicationContextAware;
27 27
 
28
-import java.util.ArrayList;
29
-import java.util.List;
30
-import java.util.Map;
28
+import java.util.*;
31 29
 import java.util.concurrent.ConcurrentHashMap;
32 30
 
33 31
 /**
@@ -38,7 +36,7 @@ public class XxlJobExecutor implements ApplicationContextAware {
38 36
 
39 37
     // ---------------------- param ----------------------
40 38
     private String adminAddresses;
41
-    private static String appName;
39
+    private String appName;
42 40
     private String ip;
43 41
     private int port;
44 42
     private String accessToken;
@@ -123,7 +121,7 @@ public class XxlJobExecutor implements ApplicationContextAware {
123 121
 
124 122
     // ---------------------- admin-client (rpc invoker) ----------------------
125 123
     private static List<AdminBiz> adminBizList;
126
-    private static void initAdminBizList(String adminAddresses, String accessToken) throws Exception {
124
+    private void initAdminBizList(String adminAddresses, String accessToken) throws Exception {
127 125
         if (adminAddresses!=null && adminAddresses.trim().length()>0) {
128 126
             for (String address: adminAddresses.trim().split(",")) {
129 127
                 if (address!=null && address.trim().length()>0) {
@@ -155,13 +153,19 @@ public class XxlJobExecutor implements ApplicationContextAware {
155 153
     // ---------------------- executor-server (rpc provider) ----------------------
156 154
     private XxlRpcInvokerFactory xxlRpcInvokerFactory = null;
157 155
     private XxlRpcProviderFactory xxlRpcProviderFactory = null;
156
+
158 157
     private void initRpcProvider(String ip, int port, String appName, String accessToken) throws Exception {
159 158
         // init invoker factory
160 159
         xxlRpcInvokerFactory = new XxlRpcInvokerFactory();
161 160
 
162 161
         // init, provider factory
162
+        String address = IpUtil.getIpPort(ip, port);
163
+        Map<String, String> serviceRegistryParam = new HashMap<String, String>();
164
+        serviceRegistryParam.put("appName", appName);
165
+        serviceRegistryParam.put("address", address);
166
+
163 167
         xxlRpcProviderFactory = new XxlRpcProviderFactory();
164
-        xxlRpcProviderFactory.initConfig(NetEnum.JETTY, Serializer.SerializeEnum.HESSIAN.getSerializer(), ip, port, accessToken, ExecutorServiceRegistry.class, null);
168
+        xxlRpcProviderFactory.initConfig(NetEnum.JETTY, Serializer.SerializeEnum.HESSIAN.getSerializer(), ip, port, accessToken, ExecutorServiceRegistry.class, serviceRegistryParam);
165 169
 
166 170
         // add services
167 171
         xxlRpcProviderFactory.addService(ExecutorBiz.class.getName(), null, new ExecutorBizImpl());
@@ -171,25 +175,32 @@ public class XxlJobExecutor implements ApplicationContextAware {
171 175
 
172 176
     }
173 177
 
174
-    public static class ExecutorServiceRegistry extends LocalServiceRegistry {
175
-        @Override
176
-        public boolean registry(String key, String value) {
178
+    public static class ExecutorServiceRegistry extends ServiceRegistry {
177 179
 
180
+        @Override
181
+        public void start(Map<String, String> param) {
178 182
             // start registry
179
-            if (ExecutorBiz.class.getName().equalsIgnoreCase(key)) {
180
-                ExecutorRegistryThread.getInstance().start(appName, value);
181
-            }
182
-
183
-            return super.registry(key, value);
183
+            ExecutorRegistryThread.getInstance().start(param.get("appName"), param.get("address"));
184 184
         }
185
-
186 185
         @Override
187 186
         public void stop() {
188 187
             // stop registry
189 188
             ExecutorRegistryThread.getInstance().toStop();
189
+        }
190 190
 
191
-            super.stop();
191
+        @Override
192
+        public boolean registry(String key, String value) {
193
+            return false;
194
+        }
195
+        @Override
196
+        public boolean remove(String key, String value) {
197
+            return false;
198
+        }
199
+        @Override
200
+        public TreeSet<String> discovery(String key) {
201
+            return null;
192 202
         }
203
+
193 204
     }
194 205
 
195 206
     private void stopRpcProvider() {
@@ -217,7 +228,7 @@ public class XxlJobExecutor implements ApplicationContextAware {
217 228
     public static IJobHandler loadJobHandler(String name){
218 229
         return jobHandlerRepository.get(name);
219 230
     }
220
-    private static void initJobHandlerRepository(ApplicationContext applicationContext){
231
+    private void initJobHandlerRepository(ApplicationContext applicationContext){
221 232
         if (applicationContext == null) {
222 233
             return;
223 234
         }

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

@@ -15,6 +15,7 @@
15 15
         <module>xxl-job-executor-sample-springboot</module>
16 16
         <module>xxl-job-executor-sample-jfinal</module>
17 17
         <module>xxl-job-executor-sample-nutz</module>
18
+        <module>xxl-job-executor-sample-frameless</module>
18 19
     </modules>
19 20
 
20 21
 </project>

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

@@ -0,0 +1,37 @@
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-executor-samples</artifactId>
9
+        <version>2.0.0-SNAPSHOT</version>
10
+    </parent>
11
+    <artifactId>xxl-job-executor-sample-frameless</artifactId>
12
+    <packaging>jar</packaging>
13
+
14
+    <name>${project.artifactId}</name>
15
+    <description>Example executor project for spring boot.</description>
16
+    <url>http://www.xuxueli.com/</url>
17
+
18
+
19
+    <dependencies>
20
+
21
+        <!-- slf4j -->
22
+        <dependency>
23
+            <groupId>org.slf4j</groupId>
24
+            <artifactId>slf4j-log4j12</artifactId>
25
+            <version>${slf4j-api.version}</version>
26
+        </dependency>
27
+
28
+        <!-- xxl-job-core -->
29
+        <dependency>
30
+            <groupId>com.xuxueli</groupId>
31
+            <artifactId>xxl-job-core</artifactId>
32
+            <version>${project.parent.version}</version>
33
+        </dependency>
34
+    </dependencies>
35
+
36
+
37
+</project>

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

@@ -0,0 +1,33 @@
1
+package com.xuxueli.executor.sample.frameless;
2
+
3
+import com.xuxueli.executor.sample.frameless.config.FrameLessXxlJobConfig;
4
+import org.slf4j.Logger;
5
+import org.slf4j.LoggerFactory;
6
+
7
+import java.util.concurrent.TimeUnit;
8
+
9
+/**
10
+ * @author xuxueli 2018-10-31 19:05:43
11
+ */
12
+public class Application {
13
+    private static Logger logger = LoggerFactory.getLogger(Application.class);
14
+
15
+    public static void main(String[] args) {
16
+
17
+        try {
18
+            // start
19
+            FrameLessXxlJobConfig.getInstance().initXxlJobExecutor();
20
+
21
+            while (true) {
22
+                TimeUnit.HOURS.sleep(1);
23
+            }
24
+        } catch (Exception e) {
25
+            logger.error(e.getMessage(), e);
26
+        } finally {
27
+            // destory
28
+            FrameLessXxlJobConfig.getInstance().destoryXxlJobExecutor();
29
+        }
30
+
31
+    }
32
+
33
+}

+ 96 - 0
xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xuxueli/executor/sample/frameless/config/FrameLessXxlJobConfig.java Wyświetl plik

@@ -0,0 +1,96 @@
1
+package com.xuxueli.executor.sample.frameless.config;
2
+
3
+import com.xuxueli.executor.sample.frameless.jobhandler.DemoJobHandler;
4
+import com.xuxueli.executor.sample.frameless.jobhandler.HttpJobHandler;
5
+import com.xuxueli.executor.sample.frameless.jobhandler.ShardingJobHandler;
6
+import com.xxl.job.core.executor.XxlJobExecutor;
7
+import org.slf4j.Logger;
8
+import org.slf4j.LoggerFactory;
9
+
10
+import java.io.IOException;
11
+import java.io.InputStreamReader;
12
+import java.util.Properties;
13
+
14
+/**
15
+ * @author xuxueli 2018-10-31 19:05:43
16
+ */
17
+public class FrameLessXxlJobConfig {
18
+    private static Logger logger = LoggerFactory.getLogger(FrameLessXxlJobConfig.class);
19
+
20
+
21
+    private static FrameLessXxlJobConfig instance = new FrameLessXxlJobConfig();
22
+    public static FrameLessXxlJobConfig getInstance() {
23
+        return instance;
24
+    }
25
+
26
+
27
+    private XxlJobExecutor xxlJobExecutor = null;
28
+
29
+    /**
30
+     * init
31
+     */
32
+    public void initXxlJobExecutor() {
33
+
34
+        // registry jobhandler
35
+        XxlJobExecutor.registJobHandler("demoJobHandler", new DemoJobHandler());
36
+        XxlJobExecutor.registJobHandler("shardingJobHandler", new ShardingJobHandler());
37
+        XxlJobExecutor.registJobHandler("httpJobHandler", new HttpJobHandler());
38
+
39
+        // load executor prop
40
+        Properties xxlJobProp = loadProperties("xxl-job-executor.properties");
41
+
42
+
43
+        // init executor
44
+        xxlJobExecutor = new XxlJobExecutor();
45
+        xxlJobExecutor.setAdminAddresses(xxlJobProp.getProperty("xxl.job.admin.addresses"));
46
+        xxlJobExecutor.setAppName(xxlJobProp.getProperty("xxl.job.executor.appname"));
47
+        xxlJobExecutor.setIp(xxlJobProp.getProperty("xxl.job.executor.ip"));
48
+        xxlJobExecutor.setPort(Integer.valueOf(xxlJobProp.getProperty("xxl.job.executor.port")));
49
+        xxlJobExecutor.setAccessToken(xxlJobProp.getProperty("xxl.job.accessToken"));
50
+        xxlJobExecutor.setLogPath(xxlJobProp.getProperty("xxl.job.executor.logpath"));
51
+        xxlJobExecutor.setLogRetentionDays(Integer.valueOf(xxlJobProp.getProperty("xxl.job.executor.logretentiondays")));
52
+
53
+        // start executor
54
+        try {
55
+            xxlJobExecutor.start();
56
+        } catch (Exception e) {
57
+            logger.error(e.getMessage(), e);
58
+        }
59
+    }
60
+
61
+    /**
62
+     * destory
63
+     */
64
+    public void destoryXxlJobExecutor() {
65
+        if (xxlJobExecutor != null) {
66
+            xxlJobExecutor.destroy();
67
+        }
68
+    }
69
+
70
+
71
+    public static Properties loadProperties(String propertyFileName) {
72
+        InputStreamReader in = null;
73
+        try {
74
+            ClassLoader loder = Thread.currentThread().getContextClassLoader();
75
+
76
+            in = new InputStreamReader(loder.getResourceAsStream(propertyFileName), "UTF-8");;
77
+            if (in != null) {
78
+                Properties prop = new Properties();
79
+                prop.load(in);
80
+                return prop;
81
+            }
82
+        } catch (IOException e) {
83
+            logger.error("load {} error!", propertyFileName);
84
+        } finally {
85
+            if (in != null) {
86
+                try {
87
+                    in.close();
88
+                } catch (IOException e) {
89
+                    logger.error("close {} error!", propertyFileName);
90
+                }
91
+            }
92
+        }
93
+        return null;
94
+    }
95
+
96
+}

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

@@ -0,0 +1,32 @@
1
+package com.xuxueli.executor.sample.frameless.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
+ * 任务Handler示例(Bean模式)
11
+ *
12
+ * 开发步骤:
13
+ * 1、继承"IJobHandler":“com.xxl.job.core.handler.IJobHandler”;
14
+ * 2、注册到执行器工厂:在 "JFinalCoreConfig.initXxlJobExecutor" 中手动注册,注解key值对应的是调度中心新建任务的JobHandler属性的值。
15
+ * 3、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
16
+ *
17
+ * @author xuxueli 2015-12-19 19:43:36
18
+ */
19
+public class DemoJobHandler extends IJobHandler {
20
+
21
+	@Override
22
+	public ReturnT<String> execute(String param) throws Exception {
23
+		XxlJobLogger.log("XXL-JOB, Hello World.");
24
+
25
+		for (int i = 0; i < 5; i++) {
26
+			XxlJobLogger.log("beat at:" + i);
27
+			TimeUnit.SECONDS.sleep(2);
28
+		}
29
+		return SUCCESS;
30
+	}
31
+
32
+}

+ 63 - 0
xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/java/com/xuxueli/executor/sample/frameless/jobhandler/HttpJobHandler.java Wyświetl plik

@@ -0,0 +1,63 @@
1
+package com.xuxueli.executor.sample.frameless.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 org.eclipse.jetty.client.HttpClient;
7
+import org.eclipse.jetty.client.api.ContentResponse;
8
+import org.eclipse.jetty.client.api.Request;
9
+import org.eclipse.jetty.http.HttpMethod;
10
+import org.eclipse.jetty.http.HttpStatus;
11
+
12
+import java.util.concurrent.TimeUnit;
13
+
14
+/**
15
+ * 跨平台Http任务
16
+ *
17
+ * @author xuxueli 2018-09-16 03:48:34
18
+ */
19
+public class HttpJobHandler extends IJobHandler {
20
+
21
+	@Override
22
+	public ReturnT<String> execute(String param) throws Exception {
23
+
24
+		// valid
25
+		if (param==null || param.trim().length()==0) {
26
+			XxlJobLogger.log("URL Empty");
27
+			return FAIL;
28
+		}
29
+
30
+		// httpclient
31
+		HttpClient httpClient = null;
32
+		try {
33
+			httpClient = new HttpClient();
34
+			httpClient.setFollowRedirects(false);	// Configure HttpClient, for example:
35
+			httpClient.start();						// Start HttpClient
36
+
37
+			// request
38
+			Request request = httpClient.newRequest(param);
39
+			request.method(HttpMethod.GET);
40
+			request.timeout(5000, TimeUnit.MILLISECONDS);
41
+
42
+			// invoke
43
+			ContentResponse response = request.send();
44
+			if (response.getStatus() != HttpStatus.OK_200) {
45
+				XxlJobLogger.log("Http StatusCode({}) Invalid.", response.getStatus());
46
+				return FAIL;
47
+			}
48
+
49
+			String responseMsg = response.getContentAsString();
50
+			XxlJobLogger.log(responseMsg);
51
+			return SUCCESS;
52
+		} catch (Exception e) {
53
+			XxlJobLogger.log(e);
54
+			return FAIL;
55
+		} finally {
56
+			if (httpClient != null) {
57
+				httpClient.stop();
58
+			}
59
+		}
60
+
61
+	}
62
+
63
+}

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

@@ -0,0 +1,34 @@
1
+package com.xuxueli.executor.sample.frameless.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
+ * @author xuxueli 2017-07-25 20:56:50
12
+ */
13
+public class ShardingJobHandler extends IJobHandler {
14
+
15
+	@Override
16
+	public ReturnT<String> execute(String param) throws Exception {
17
+
18
+		// 分片参数
19
+		ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
20
+		XxlJobLogger.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardingVO.getIndex(), shardingVO.getTotal());
21
+
22
+		// 业务逻辑
23
+		for (int i = 0; i < shardingVO.getTotal(); i++) {
24
+			if (i == shardingVO.getIndex()) {
25
+				XxlJobLogger.log("第 {} 片, 命中分片开始处理", i);
26
+			} else {
27
+				XxlJobLogger.log("第 {} 片, 忽略", i);
28
+			}
29
+		}
30
+
31
+		return SUCCESS;
32
+	}
33
+	
34
+}

+ 27 - 0
xxl-job-executor-samples/xxl-job-executor-sample-frameless/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-frameless [%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-frameless.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-frameless [%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>

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

@@ -0,0 +1,15 @@
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=9995
8
+
9
+### xxl-job, access token
10
+xxl.job.accessToken=
11
+
12
+### xxl-job log path
13
+xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
14
+### xxl-job log retention days
15
+xxl.job.executor.logretentiondays=-1

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

@@ -16,9 +16,6 @@
16 16
     <url>http://www.xuxueli.com/</url>
17 17
 
18 18
     <properties>
19
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
20
-        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
21
-        <java.version>1.7</java.version>
22 19
     </properties>
23 20
 
24 21
     <dependencyManagement>