diff --git a/pigx-common/pigx-common-job/pom.xml b/pigx-common/pigx-common-job/pom.xml
index d7cab27d0..898a8f727 100644
--- a/pigx-common/pigx-common-job/pom.xml
+++ b/pigx-common/pigx-common-job/pom.xml
@@ -39,5 +39,10 @@
xxl-job-core
${xxl.job.version}
+
+
+ org.springframework.cloud
+ spring-cloud-commons
+
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/XxlJobAutoConfiguration.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/XxlJobAutoConfiguration.java
index 342e07c78..5d922cd69 100644
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/XxlJobAutoConfiguration.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/XxlJobAutoConfiguration.java
@@ -20,13 +20,17 @@ package com.pig4cloud.pigx.common.job;
import com.pig4cloud.pigx.common.job.properties.XxlJobProperties;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
+import org.springframework.util.StringUtils;
+
+import java.util.stream.Collectors;
/**
* @author lengleng
- * @date 2019-09-18
+ * @date 2020-11-09
*
* xxl 初始化
*/
@@ -35,10 +39,21 @@ import org.springframework.context.annotation.Configuration;
@ComponentScan("com.pig4cloud.pigx.common.job.properties")
public class XxlJobAutoConfiguration {
+ /**
+ * 服务名称 包含 XXL_JOB_ADMIN 则说明是 Admin
+ */
+ private static final String XXL_JOB_ADMIN = "xxl-job-admin";
+
+ /**
+ * 配置xxl-job 执行器,提供自动发现 xxl-job-admin 能力
+ * @param xxlJobProperties xxl 配置
+ * @param discoveryClient 注册发现客户端
+ * @return
+ */
@Bean
- public XxlJobSpringExecutor xxlJobSpringExecutor(XxlJobProperties xxlJobProperties) {
+ public XxlJobSpringExecutor xxlJobSpringExecutor(XxlJobProperties xxlJobProperties,
+ DiscoveryClient discoveryClient) {
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
- xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdmin().getAddresses());
xxlJobSpringExecutor.setAppname(xxlJobProperties.getExecutor().getAppname());
xxlJobSpringExecutor.setAddress(xxlJobProperties.getExecutor().getAddress());
xxlJobSpringExecutor.setIp(xxlJobProperties.getExecutor().getIp());
@@ -46,6 +61,19 @@ public class XxlJobAutoConfiguration {
xxlJobSpringExecutor.setAccessToken(xxlJobProperties.getExecutor().getAccessToken());
xxlJobSpringExecutor.setLogPath(xxlJobProperties.getExecutor().getLogPath());
xxlJobSpringExecutor.setLogRetentionDays(xxlJobProperties.getExecutor().getLogRetentionDays());
+
+ // 如果配置为空则获取注册中心的服务列表 "http://pigx-xxl:9080/xxl-job-admin"
+ if (StringUtils.isEmpty(xxlJobProperties.getAdmin().getAddresses())) {
+ String serverList = discoveryClient.getServices().stream().filter(s -> s.contains(XXL_JOB_ADMIN))
+ .flatMap(s -> discoveryClient.getInstances(s).stream()).map(instance -> String
+ .format("http://%s:%s/%s", instance.getHost(), instance.getPort(), XXL_JOB_ADMIN))
+ .collect(Collectors.joining(","));
+ xxlJobSpringExecutor.setAddress(serverList);
+ }
+ else {
+ xxlJobSpringExecutor.setAddress(xxlJobProperties.getAdmin().getAddresses());
+ }
+
return xxlJobSpringExecutor;
}
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/XxlAdminProperties.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/XxlAdminProperties.java
index face39ba8..6155a1b6d 100644
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/XxlAdminProperties.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/XxlAdminProperties.java
@@ -31,6 +31,6 @@ public class XxlAdminProperties {
/**
* 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。 执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
*/
- private String addresses = "http://pigx-xxl:9080/xxl-job-admin";
+ private String addresses;
}
diff --git a/pigx-visual/pigx-xxl-job-admin/pom.xml b/pigx-visual/pigx-xxl-job-admin/pom.xml
index b5f61cf9e..cdc7eb818 100755
--- a/pigx-visual/pigx-xxl-job-admin/pom.xml
+++ b/pigx-visual/pigx-xxl-job-admin/pom.xml
@@ -12,6 +12,17 @@
jar
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
diff --git a/pigx-visual/pigx-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java b/pigx-visual/pigx-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java
index bdc64b2e2..520092d92 100755
--- a/pigx-visual/pigx-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java
+++ b/pigx-visual/pigx-xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java
@@ -11,6 +11,7 @@ import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
/**
* 权限拦截
@@ -20,6 +21,11 @@ import javax.servlet.http.HttpServletResponse;
@Component
public class PermissionInterceptor extends HandlerInterceptorAdapter {
+ /**
+ * 针对 spring boot admin 对外暴露的接口
+ */
+ private static final String[] ACTUATOR_IGNORE = { "/actuator", "/details", "/health" };
+
@Resource
private LoginService loginService;
@@ -31,6 +37,10 @@ public class PermissionInterceptor extends HandlerInterceptorAdapter {
return super.preHandle(request, response, handler);
}
+ if (Arrays.stream(ACTUATOR_IGNORE).anyMatch(s -> request.getRequestURI().contains(s))) {
+ return super.preHandle(request, response, handler);
+ }
+
// if need login
boolean needLogin = true;
boolean needAdminuser = false;
diff --git a/pigx-visual/pigx-xxl-job-admin/src/main/resources/application.yml b/pigx-visual/pigx-xxl-job-admin/src/main/resources/application.yml
index ad15c0e0e..e36e355f1 100755
--- a/pigx-visual/pigx-xxl-job-admin/src/main/resources/application.yml
+++ b/pigx-visual/pigx-xxl-job-admin/src/main/resources/application.yml
@@ -1,9 +1,3 @@
-# 此配置只适合开发测试环境,详细配置参考: http://t.cn/A64RaHJm
-server:
- port: 9080
- servlet:
- context-path: /xxl-job-admin
-
# xxl
xxl:
job:
@@ -20,7 +14,7 @@ mybatis:
# spring
spring:
datasource:
- url: jdbc:mysql://${MYSQL_HOST:pig-mysql}:${MYSQL_PORT:3306}/${MYSQL_DB:pigxx_job}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
+ url: jdbc:mysql://${MYSQL_HOST:pigx-mysql}:${MYSQL_PORT:3306}/${MYSQL_DB:pigxx_job}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
driver-class-name: com.mysql.cj.jdbc.Driver
username: ${MYSQL-PWD:root}
password: ${MYSQL-PWD:root}
@@ -46,9 +40,16 @@ spring:
ssl.enable: true
starttls.enable: false
required: false
+# spring boot admin 配置
-# close mail health check
management:
health:
mail:
enabled: false
+ endpoints:
+ web:
+ exposure:
+ include: '*'
+ endpoint:
+ health:
+ show-details: ALWAYS
\ No newline at end of file
diff --git a/pigx-visual/pigx-xxl-job-admin/src/main/resources/bootstrap.yml b/pigx-visual/pigx-xxl-job-admin/src/main/resources/bootstrap.yml
new file mode 100644
index 000000000..66504fa4d
--- /dev/null
+++ b/pigx-visual/pigx-xxl-job-admin/src/main/resources/bootstrap.yml
@@ -0,0 +1,17 @@
+# 此配置只适合开发测试环境,详细配置参考: http://t.cn/A64RaHJm
+server:
+ port: 9080
+ servlet:
+ context-path: /xxl-job-admin
+
+spring:
+ application:
+ name: @artifactId@
+ cloud:
+ nacos:
+ discovery:
+ server-addr: ${NACOS_HOST:pigx-register}:${NACOS_PORT:8848}
+ metadata:
+ management.context-path: ${server.servlet.context-path}/actuator
+ profiles:
+ active: @profiles.active@
\ No newline at end of file