说明
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。
GitHub:https://github.com/xuxueli/xxl-job
文档:https://www.xuxueli.com/xxl-job/
mysql数据库表 sql 在 doc/db 目录下面
<!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version>
</dependency>
package com.eth.filecoin.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author: aqi
* @Date: 2021/5/27 10:33
* @Description:
*/
@Configuration
@Slf4j
public class XxlJobConfig {
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
// @Bean(initMethod = "start", destroyMethod = "destroy")
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
log.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appName);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
/**
* 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
*
* 1、引入依赖:
* <dependency>
* <groupId>org.springframework.cloud</groupId>
* <artifactId>spring-cloud-commons</artifactId>
* <version>${version}</version>
* </dependency>
*
* 2、配置文件,或者容器启动变量
* spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
*
* 3、获取IP
* String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
*/
}
xxl:
job:
#执行器通讯TOKEN:非空时启用
# 初始化报错就加上了,不报错不管
accessToken: admin
admin:
# 这个地址要连的上 xxl-job 里面的 xxl-job-admin
addresses: http://127.0.0.1:8086/xxl-job-admin
executor:
# 这个 name 新增执行器名称必须要一样
appname: xxl-job-executor
logpath: job-logs
#执行器Log文件定期清理功能,指定日志保存天数,日志文件过期自动删除。限制至少保持3天,否则功能不生效
#-1表示永不删除
logretentiondays: 5
ip:
port: 9999
package com.eth.filecoin.job;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
import static com.xxl.job.core.biz.model.ReturnT.SUCCESS;
/**
* @author: aqi
* @Date: 2021/5/27 10:36
* @Description:
*/
@Component
public class DemoJobHandler extends IJobHandler {
@Override
@XxlJob("demoJobHandler2222")
public void execute() throws Exception {
XxlJobHelper.log("XXL-JOB, Hello World.");
for (int i = 0; i < 5; i++) {
XxlJobHelper.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2);
}
}
}
另一种写法:
执行器名称,要和配置文件配的一样,不然会报错。
要注意的地方
GitHub 或者 码云 xxl-job 下面有 xxl-job-admin 子工程,这个要先启动,再启动 xxl-job-executor-samples里面的示例。
可能报错地方之一
java.net.BindException: Address already in use: bind
解决办法:
可能报错地方之二
检查配置文件,不管是用xxl-job 下面的示例,还是通过 maven 包的定时job,都是连的 xxl-job-admin 这个,检查配置文件什么端口号、地址啊,这些。
版权声明:本文由 阿琦 在 2021年05月29日发表。本文采用CC BY-NC-SA 4.0许可协议,非商业转载请注明出处,不得用于商业目的。
文章题目及链接:《分布式任务调度平台 xxl-job 集成》