diff --git a/ad-distribute-starters/ad-distribute-starter-job/pom.xml b/ad-distribute-starters/ad-distribute-starter-job/pom.xml new file mode 100644 index 0000000..572578f --- /dev/null +++ b/ad-distribute-starters/ad-distribute-starter-job/pom.xml @@ -0,0 +1,34 @@ + + + + ad-distribute-starters + com.baiye + 1.1.0 + + 4.0.0 + + ad-distribute-starter-job + + + 8 + 8 + + + + + com.xuxueli + xxl-job-core + + + org.springframework.boot + spring-boot-autoconfigure + + + org.springframework.boot + spring-boot-configuration-processor + true + + + \ No newline at end of file diff --git a/ad-distribute-starters/ad-distribute-starter-job/src/main/java/com/baiye/ballcat/common/job/XxlJobAutoConfiguration.java b/ad-distribute-starters/ad-distribute-starter-job/src/main/java/com/baiye/ballcat/common/job/XxlJobAutoConfiguration.java new file mode 100644 index 0000000..375b029 --- /dev/null +++ b/ad-distribute-starters/ad-distribute-starter-job/src/main/java/com/baiye/ballcat/common/job/XxlJobAutoConfiguration.java @@ -0,0 +1,96 @@ +package com.baiye.ballcat.common.job; + + +import com.baiye.ballcat.common.job.properties.XxlExecutorProperties; +import com.baiye.ballcat.common.job.properties.XxlJobProperties; +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.core.env.Environment; +import org.springframework.util.StringUtils; + +/** + * @author lengleng + * @date 2019-09-18 + *

+ * xxl 初始化 + */ +@Slf4j +@AutoConfiguration +@EnableConfigurationProperties(XxlJobProperties.class) +@ConditionalOnProperty(prefix = XxlJobProperties.PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) +@RequiredArgsConstructor +public class XxlJobAutoConfiguration { + + private final Environment environment; + + @Bean + public XxlJobSpringExecutor xxlJobSpringExecutor(XxlJobProperties xxlJobProperties) { + if (log.isInfoEnabled()) { + log.info(">>>>>>>>>>> xxl-job config init."); + } + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdmin().getAddresses()); + XxlExecutorProperties executorProperties = xxlJobProperties.getExecutor(); + xxlJobSpringExecutor.setAppname(getExecutorName(executorProperties)); + xxlJobSpringExecutor.setIp(executorProperties.getIp()); + xxlJobSpringExecutor.setPort(executorProperties.getPort()); + xxlJobSpringExecutor.setAccessToken(getAccessToken(xxlJobProperties)); + xxlJobSpringExecutor.setLogPath(getLogPath(executorProperties)); + xxlJobSpringExecutor.setLogRetentionDays(executorProperties.getLogRetentionDays()); + xxlJobSpringExecutor.setAddress(executorProperties.getAddress()); + return xxlJobSpringExecutor; + } + + /** + * 获取执行器名称,缺省为Spring Boot应用名称 + * + * @param properties 执行器配置 + * @return 执行期名称 + */ + private String getExecutorName(XxlExecutorProperties properties) { + String appName = properties.getAppname(); + if (StringUtils.hasText(appName)) { + return appName; + } else { + return environment.getProperty("spring.application.name"); + } + } + + /** + * 获取xxl-job执行器通讯令牌 + * + * @param properties 主配置文件 + * @return + */ + private String getAccessToken(XxlJobProperties properties) { + if (StringUtils.hasText(properties.getAccessToken())) { + return properties.getAccessToken(); + } else { + log.warn("为提升系统安全性,生产环境建议启用调度中心和执行器安全性校验!可通过配置项 “xxl.job.accessToken” 进行AccessToken的设置"); + return null; + } + } + + /** + * 获取日志路径 + * + * @param properties 执行器配置文件 + * @return + */ + private String getLogPath(XxlExecutorProperties properties) { + String logPath = properties.getLogPath(); + if (StringUtils.hasText(logPath)) { + return logPath; + } + return environment.getProperty("logging.file.path", "logs") + .concat("/") + .concat(environment.getProperty("spring.application.name")) + .concat("/jobs"); + } + +} diff --git a/ad-distribute-starters/ad-distribute-starter-job/src/main/java/com/baiye/ballcat/common/job/properties/XxlAdminProperties.java b/ad-distribute-starters/ad-distribute-starter-job/src/main/java/com/baiye/ballcat/common/job/properties/XxlAdminProperties.java new file mode 100644 index 0000000..b7c28cc --- /dev/null +++ b/ad-distribute-starters/ad-distribute-starter-job/src/main/java/com/baiye/ballcat/common/job/properties/XxlAdminProperties.java @@ -0,0 +1,19 @@ +package com.baiye.ballcat.common.job.properties; + +import lombok.Data; + +/** + * @author lengleng + * @date 2019-09-18 + *

+ * xxl 管控台相关属性 + */ +@Data +public class XxlAdminProperties { + + /** + * 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。 执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册; + */ + private String addresses; + +} diff --git a/ad-distribute-starters/ad-distribute-starter-job/src/main/java/com/baiye/ballcat/common/job/properties/XxlExecutorProperties.java b/ad-distribute-starters/ad-distribute-starter-job/src/main/java/com/baiye/ballcat/common/job/properties/XxlExecutorProperties.java new file mode 100644 index 0000000..fd8123f --- /dev/null +++ b/ad-distribute-starters/ad-distribute-starter-job/src/main/java/com/baiye/ballcat/common/job/properties/XxlExecutorProperties.java @@ -0,0 +1,43 @@ +package com.baiye.ballcat.common.job.properties; + +import lombok.Data; + +/** + * @author lengleng + * @date 2019-09-18 + */ +@Data +public class XxlExecutorProperties { + + /** + * 执行器AppName [选填]:执行器心跳注册分组依据;为空则取spring应用名 + */ + private String appname; + + /** + * 优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址 从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。 + */ + private String address; + + /** + * 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP ,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 + * "调度中心请求并触发任务" + */ + private String ip; + + /** + * 执行器端口号 [选填]:小于等于0则自动获取;单机部署多个执行器且非自动获取端口时,注意要配置不同执行器端口; + */ + private Integer port = 0; + + /** + * 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径; + */ + private String logPath; + + /** + * 执行器日志保存天数 [选填] :值大于3时生效,启用执行器Log文件定期清理功能,否则, 如-1, 关闭自动清理功能; + */ + private Integer logRetentionDays = 30; + +} diff --git a/ad-distribute-starters/ad-distribute-starter-job/src/main/java/com/baiye/ballcat/common/job/properties/XxlJobProperties.java b/ad-distribute-starters/ad-distribute-starter-job/src/main/java/com/baiye/ballcat/common/job/properties/XxlJobProperties.java new file mode 100644 index 0000000..41ee524 --- /dev/null +++ b/ad-distribute-starters/ad-distribute-starter-job/src/main/java/com/baiye/ballcat/common/job/properties/XxlJobProperties.java @@ -0,0 +1,33 @@ +package com.baiye.ballcat.common.job.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; + +/** + * @author lengleng + * @date 2019-09-18 + */ +@Data +@ConfigurationProperties(prefix = XxlJobProperties.PREFIX) +public class XxlJobProperties { + + public static final String PREFIX = "ballcat.xxl.job"; + + /** + * 是否启用分布式调度任务,默认:开启 + */ + private boolean enabled = true; + + /** + * 执行器通讯TOKEN [选填]:非空时启用; + */ + private String accessToken; + + @NestedConfigurationProperty + private XxlAdminProperties admin = new XxlAdminProperties(); + + @NestedConfigurationProperty + private XxlExecutorProperties executor = new XxlExecutorProperties(); + +} \ No newline at end of file diff --git a/ad-distribute-starters/ad-distribute-starter-job/src/main/resources/META-INF/spring.factories b/ad-distribute-starters/ad-distribute-starter-job/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..857a151 --- /dev/null +++ b/ad-distribute-starters/ad-distribute-starter-job/src/main/resources/META-INF/spring.factories @@ -0,0 +1,4 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + com.baiye.ballcat.common.job.XxlJobAutoConfiguration + + diff --git a/ad-distribute-starters/ad-distribute-starter-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ad-distribute-starters/ad-distribute-starter-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..9a5aef6 --- /dev/null +++ b/ad-distribute-starters/ad-distribute-starter-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.baiye.ballcat.common.job.XxlJobAutoConfiguration \ No newline at end of file diff --git a/ad-distribute-starters/pom.xml b/ad-distribute-starters/pom.xml index 08e584f..4fbece3 100644 --- a/ad-distribute-starters/pom.xml +++ b/ad-distribute-starters/pom.xml @@ -17,13 +17,15 @@ ad-distribute-starter-swagger ad-distribute-starter-file ad-distribute-starter-websocket - + ad-distribute-starter-job + org.projectlombok lombok + \ No newline at end of file