diff --git a/.gitignore b/.gitignore
index 52c1b008..bedcaab8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,6 @@
target/
.DS_Store
.gitattributes
+.settings/
+.factorypath
+node_modules/
\ No newline at end of file
diff --git a/xxl-job-admin/pom.xml b/xxl-job-admin/pom.xml
index cd4bcf23..c34b43ba 100644
--- a/xxl-job-admin/pom.xml
+++ b/xxl-job-admin/pom.xml
@@ -63,16 +63,13 @@
mysql
mysql-connector-java
- ${mysql-connector-java.version}
-
com.xuxueli
xxl-job-core
${project.parent.version}
-
diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
index ea314b32..7a9092b9 100644
--- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
+++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
@@ -1,6 +1,5 @@
package com.xxl.job.admin.controller;
-import com.xxl.job.admin.core.cron.CronExpression;
import com.xxl.job.admin.core.exception.XxlJobException;
import com.xxl.job.admin.core.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobInfo;
@@ -29,7 +28,6 @@ import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
-import java.text.ParseException;
import java.util.*;
/**
diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
index dcf5bb83..7693d606 100644
--- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
+++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
@@ -121,7 +121,7 @@ public class JobLogController {
public String logDetailPage(int id, Model model){
// base check
- ReturnT logStatue = ReturnT.SUCCESS;
+ //ReturnT logStatue = ReturnT.SUCCESS;
XxlJobLog jobLog = xxlJobLogDao.load(id);
if (jobLog == null) {
throw new RuntimeException(I18nUtil.getString("joblog_logid_unvalid"));
diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/complete/XxlJobCompleter.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/complete/XxlJobCompleter.java
index b9ac59a3..b2986a04 100644
--- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/complete/XxlJobCompleter.java
+++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/complete/XxlJobCompleter.java
@@ -89,7 +89,7 @@ public class XxlJobCompleter {
private static boolean isNumeric(String str){
try {
- int result = Integer.valueOf(str);
+ Integer.valueOf(str);
return true;
} catch (NumberFormatException e) {
return false;
diff --git a/xxl-job-boot-starter-executor/pom.xml b/xxl-job-boot-starter-executor/pom.xml
new file mode 100644
index 00000000..0768de93
--- /dev/null
+++ b/xxl-job-boot-starter-executor/pom.xml
@@ -0,0 +1,64 @@
+
+
+ 4.0.0
+
+ com.xuxueli
+ xxl-job
+ 2.3.0
+
+ xxl-job-boot-starter-executor
+ ${project.artifactId}
+ Example executor project for spring boot.
+ https://www.xuxueli.com/
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ ${spring-boot.version}
+ pom
+ import
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ true
+ test
+
+
+ org.junit.vintage
+ junit-vintage-engine
+
+
+
+
+ org.projectlombok
+ lombok
+ true
+ provided
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+ com.xuxueli
+ xxl-job-core
+ ${project.parent.version}
+
+
+
\ No newline at end of file
diff --git a/xxl-job-boot-starter-executor/src/main/java/com/xxl/job/core/config/ApplicationProperties.java b/xxl-job-boot-starter-executor/src/main/java/com/xxl/job/core/config/ApplicationProperties.java
new file mode 100644
index 00000000..edd308fd
--- /dev/null
+++ b/xxl-job-boot-starter-executor/src/main/java/com/xxl/job/core/config/ApplicationProperties.java
@@ -0,0 +1,24 @@
+package com.xxl.job.core.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+/**
+ * 读取应用的配置参数
+ * @author cqyhm
+ *
+ */
+@Setter@Getter@ToString
+@ConfigurationProperties(prefix = ApplicationProperties.PREFIX, ignoreInvalidFields = true)
+public class ApplicationProperties {
+ /**
+ * 配置前缀
+ */
+ public static final String PREFIX = "spring.application";
+ /**
+ * 应用程序名称
+ */
+ private String name;
+}
diff --git a/xxl-job-boot-starter-executor/src/main/java/com/xxl/job/core/config/JobAutoConfiguration.java b/xxl-job-boot-starter-executor/src/main/java/com/xxl/job/core/config/JobAutoConfiguration.java
new file mode 100644
index 00000000..fd90481f
--- /dev/null
+++ b/xxl-job-boot-starter-executor/src/main/java/com/xxl/job/core/config/JobAutoConfiguration.java
@@ -0,0 +1,67 @@
+package com.xxl.job.core.config;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.util.StringUtils;
+
+import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
+import com.xxl.job.core.thread.ExecutorRegistryThread;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 执行器端自动配置
+ * @author cqyhm
+ */
+@Slf4j
+@Configuration()
+@ConditionalOnClass(ExecutorRegistryThread.class)
+@ConditionalOnProperty(prefix =JobConfigProperties.PREFIX ,name = "enabled", matchIfMissing = true)
+@EnableConfigurationProperties(value = {JobConfigProperties.class,ApplicationProperties.class})
+public class JobAutoConfiguration {
+
+ @Bean
+ public XxlJobSpringExecutor xxlJobExecutor(JobConfigProperties jobConfigProperties,
+ ApplicationProperties applicationProperties) {
+ log.info(">>>>>>>>>>> xxl-job config init.");
+ log.info("读取配置{}",applicationProperties);
+ log.info("读取配置{}",jobConfigProperties);
+ XxlJobSpringExecutor JobSpringExecutor = new XxlJobSpringExecutor();
+ //通讯令牌
+ JobSpringExecutor.setAccessToken(jobConfigProperties.getAccessToken());
+ //调度器设置
+ JobSpringExecutor.setAdminAddresses(jobConfigProperties.getAdmin().getAddresses());
+ //执行器设置
+ String name=applicationProperties.getName(); //应用程序的名称
+ String appName=jobConfigProperties.getExecutor().getAppname(); //调度器的名称如果没有设置取应用的名称
+ JobSpringExecutor.setAppname(StringUtils.hasText(appName) ? name: appName);
+ JobSpringExecutor.setIp(jobConfigProperties.getExecutor().getIp());
+ JobSpringExecutor.setPort(jobConfigProperties.getExecutor().getPort());
+ //执行器日志路径
+ JobSpringExecutor.setLogPath(jobConfigProperties.getExecutor().getLogpath());
+ JobSpringExecutor.setLogRetentionDays(jobConfigProperties.getExecutor().getLogretentiondays());
+
+ return JobSpringExecutor;
+ }
+ /**
+ * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
+ *
+ * 1、引入依赖:
+ *
+ * org.springframework.cloud
+ * spring-cloud-commons
+ * ${version}
+ *
+ *
+ * 2、配置文件,或者容器启动变量
+ * spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
+ *
+ * 3、获取IP
+ * String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
+ */
+
+
+}
\ No newline at end of file
diff --git a/xxl-job-boot-starter-executor/src/main/java/com/xxl/job/core/config/JobConfigProperties.java b/xxl-job-boot-starter-executor/src/main/java/com/xxl/job/core/config/JobConfigProperties.java
new file mode 100644
index 00000000..e4c68c5e
--- /dev/null
+++ b/xxl-job-boot-starter-executor/src/main/java/com/xxl/job/core/config/JobConfigProperties.java
@@ -0,0 +1,66 @@
+package com.xxl.job.core.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+/**
+ * 获取定时任务相关的配置参数
+ * @author cqyhm
+ *
+ */
+@Setter@Getter@ToString
+@ConfigurationProperties(prefix = JobConfigProperties.PREFIX, ignoreInvalidFields = true)
+public class JobConfigProperties {
+
+ public static final String PREFIX = "xxl.job";
+ /**
+ * 通讯令牌
+ */
+ private String accessToken;
+ /**
+ * 调度器设置
+ */
+ private Admin admin;
+ /**
+ * 执行器设置
+ */
+ private Executor executor;
+
+ @Data
+ public static class Admin {
+ /**
+ * 调度器地址端口多个可以用逗号隔开
+ */
+ private String addresses;
+ }
+ @Data
+ public static class Executor {
+ /**
+ * 执行器的名称(唯一编码,默认为当前应用程序的名称作为调度器的名称)
+ */
+ private String appname;
+ /**
+ * 执行器运行地址为空=ip:port
+ */
+ private String address;
+ /**
+ * 执行器所在的本机地址
+ */
+ private String ip="";
+ /**
+ * 执行器监控的端口
+ */
+ private Integer port=0;
+ /**
+ * 日志路径
+ */
+ private String logpath;
+ /**
+ * 日志保留天数
+ */
+ private Integer logretentiondays;
+ }
+}
diff --git a/xxl-job-boot-starter-executor/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/xxl-job-boot-starter-executor/src/main/resources/META-INF/additional-spring-configuration-metadata.json
new file mode 100644
index 00000000..c1878997
--- /dev/null
+++ b/xxl-job-boot-starter-executor/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -0,0 +1,55 @@
+{
+ "properties": [
+ {
+ "name": "xxl.job.enabled",
+ "type": "java.lang.Boolean",
+ "defaultValue": "true",
+ "description": "是否启用任务执行器,默认启动true"
+ },
+ {
+ "name": "xxl.job.accessToken",
+ "type": "java.lang.String",
+ "defaultValue": "",
+ "description": "调度时的通讯令牌."
+ },
+ {
+ "name": "xxl.job.admin.addresses",
+ "type": "java.lang.String",
+ "defaultValue": "http://localhost:8080/xxl-job-admin/",
+ "description": "执行器连接调度中心的地址"
+ },
+ {
+ "name": "xxl.job.executor.appname",
+ "type": "java.lang.String",
+ "defaultValue": "${spring.application.name}",
+ "description": "默认是微服务的名称"
+ },
+ {
+ "name": "xxl.job.executor.logpath",
+ "type": "java.lang.String",
+ "defaultValue": "执行器日志输出路径",
+ "description": ""
+ },
+ {
+ "name": "xxl.job.executor.logretentiondays",
+ "type": "java.lang.Integer",
+ "defaultValue": "7",
+ "description": "执行器日志保留天数"
+ },
+ {
+ "name": "xxl.job.executor.port",
+ "type": "java.lang.Integer",
+ "description": "执行器监控调度的端口."
+ },
+ {
+ "name": "xxl.job.executor.ip",
+ "type": "java.lang.String",
+ "description": "执行器所在机器的IP地址"
+ },
+ {
+ "name": "xxl.job.executor.address",
+ "type": "java.lang.String",
+ "description": "执行器所在机器的地址,如果为空则使用ip:port"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/xxl-job-boot-starter-executor/src/main/resources/META-INF/spring.factories b/xxl-job-boot-starter-executor/src/main/resources/META-INF/spring.factories
new file mode 100644
index 00000000..1d9a6b7c
--- /dev/null
+++ b/xxl-job-boot-starter-executor/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+com.xxl.job.core.config.JobAutoConfiguration
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSimpleExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSimpleExecutor.java
index d1b413a3..e8c38ea1 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSimpleExecutor.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSimpleExecutor.java
@@ -9,7 +9,6 @@ import org.slf4j.LoggerFactory;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
/**
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/util/XxlJobRemotingUtil.java b/xxl-job-core/src/main/java/com/xxl/job/core/util/XxlJobRemotingUtil.java
index 8d781c31..a8434702 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/util/XxlJobRemotingUtil.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/util/XxlJobRemotingUtil.java
@@ -12,7 +12,6 @@ import java.net.HttpURLConnection;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
-import java.util.Map;
/**
* @author xuxueli 2018-11-25 00:55:31
diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml
index 9782a28d..e119ac5c 100644
--- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml
+++ b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/pom.xml
@@ -42,14 +42,25 @@
spring-boot-starter-test
test
-
+
+ org.projectlombok
+ lombok
+ provided
+
+
+ com.xuxueli
+ xxl-job-boot-starter-executor
+ ${project.parent.version}
+
+
+
diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java
deleted file mode 100644
index bfd80e22..00000000
--- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.xxl.job.executor.core.config;
-
-import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * xxl-job config
- *
- * @author xuxueli 2017-04-28
- */
-@Configuration
-public class XxlJobConfig {
- private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
-
- @Value("${xxl.job.admin.addresses}")
- private String adminAddresses;
-
- @Value("${xxl.job.accessToken}")
- private String accessToken;
-
- @Value("${xxl.job.executor.appname}")
- private String appname;
-
- @Value("${xxl.job.executor.address}")
- private String address;
-
- @Value("${xxl.job.executor.ip}")
- private String ip;
-
- @Value("${xxl.job.executor.port}")
- private int port;
-
- @Value("${xxl.job.executor.logpath}")
- private String logPath;
-
- @Value("${xxl.job.executor.logretentiondays}")
- private int logRetentionDays;
-
-
- @Bean
- public XxlJobSpringExecutor xxlJobExecutor() {
- logger.info(">>>>>>>>>>> xxl-job config init.");
- XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
- xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
- xxlJobSpringExecutor.setAppname(appname);
- xxlJobSpringExecutor.setAddress(address);
- xxlJobSpringExecutor.setIp(ip);
- xxlJobSpringExecutor.setPort(port);
- xxlJobSpringExecutor.setAccessToken(accessToken);
- xxlJobSpringExecutor.setLogPath(logPath);
- xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
-
- return xxlJobSpringExecutor;
- }
-
- /**
- * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
- *
- * 1、引入依赖:
- *
- * org.springframework.cloud
- * spring-cloud-commons
- * ${version}
- *
- *
- * 2、配置文件,或者容器启动变量
- * spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
- *
- * 3、获取IP
- * String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
- */
-
-
-}
\ No newline at end of file
diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java
index 7ea8e52d..49749ffb 100644
--- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java
+++ b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java
@@ -1,11 +1,5 @@
package com.xxl.job.executor.service.jobhandler;
-import com.xxl.job.core.context.XxlJobHelper;
-import com.xxl.job.core.handler.annotation.XxlJob;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
-
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
@@ -15,6 +9,13 @@ import java.net.URL;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+
/**
* XxlJob开发示例(Bean模式)
*
diff --git a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.yml
similarity index 50%
rename from xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties
rename to xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.yml
index e067db4f..38a21974 100644
--- a/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties
+++ b/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.yml
@@ -1,26 +1,28 @@
# web port
-server.port=8081
+server:
+ port: 8081
# no web
#spring.main.web-environment=false
-
+spring:
application:
name: xxl-job-executor-sample
# log config
-logging.config=classpath:logback.xml
-
+logging:
+ config: classpath:logback.xml
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
-xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
-
-### xxl-job, access token
-xxl.job.accessToken=
-
+xxl:
+ job:
+ admin:
+ addresses: http://127.0.0.1:8080/xxl-job-admin
+ accessToken: ### xxl-job, access token
### xxl-job executor appname
-xxl.job.executor.appname=xxl-job-executor-sample
+ executor:
+# appname: xxl-job-executor-sample
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
-xxl.job.executor.address=
+ address:
### xxl-job executor server-info
-xxl.job.executor.ip=
-xxl.job.executor.port=9999
+ ip:
+ port: 9999
### xxl-job executor log-path
-xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
+ logpath: /data/applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
-xxl.job.executor.logretentiondays=30
+ logretentiondays: 30