定时任务表达式生成工具网站:https://cron.qqe2.com/
xxl-job 官方文档:https://www.xuxueli.com/xxl-job/
第一步、先导入xxl-job的数据库:
地址:https://gitee.com/xuxueli0323/xxl-job/tree/master/doc/db
修改数据库的用户名和密码并同时开启外部访问权限
docker安装xxl-job-admin 步骤:
拉取镜像
docker pull xuxueli/xxl-job-admin:2.3.1
开放端口
firewall-cmd --zone=public --add-port=8090/tcp --permanent
运行镜像
docker run -d \
--name xxl-job-admin \
-p 8090:8080 \
-e JVM_XMS=128m \
-e JVM_XMX=512m \
xuxueli/xxl-job-admin:2.3.1
创建配置挂载目录
mkdir -p /docker/xxl-job/config/application.properties
mkdir -p /docker/xxl-job/logs
复制配置
docker cp xxl-job-admin:/data/applogs/xxl-job /docker/xxl-job/logs
删除运行中的镜像
docker rm -f xxl-job-admin
完整的运行镜像
docker run -d \
--name xxl-job-admin \
-p 8090:8080 \
-e JVM_XMS=128m \
-e JVM_XMX=512m \
-v /docker/xxl-job/config/application.properties:/application.properties \
-v /docker/xxl-job/logs:/data/applogs \
xuxueli/xxl-job-admin:2.3.1
修改外部映射的配置文件application.properties中的数据源地址配置
访问:http://192.168.56.10:8090/xxl-job-admin
默认账号密码:admin、123456
首先引入依赖:
com.xuxueli
xxl-job-core
2.3.1
安装好xxl-job-admin 定时任务调度中心后,在项目中配置 xxl-job 参数配置 xxl-job 参数,用于创建执行器和连接调度中心,参考如下:
@Getter
@Setter
public class XxlJobAdminProperties {
private String address;
}
@Getter
@Setter
public class XxlJobExecutorProperties {
/**
* 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
*/
private String appname;
/**
* 服务注册地址,优先使用该配置作为注册地址 为空时使用内嵌服务 ”IP:PORT“ 作为注册地址 从而更灵活的支持容器类型执行器动态IP和动态映射端口问题
*/
private String address;
/**
* 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP ,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和
* "调度中心请求并触发任务"
*/
private String ip;
/**
* 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9099,单机部署多个执行器时,注意要配置不同执行器端口;
*/
private Integer port = 9099;
/**
* 执行器通讯TOKEN [必填]:从配置文件中取不到值时使用默认值;
*/
private String accessToken = "default_token";
/**
* 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
*/
private String logPath = "logs/applogs/xxl-job/jobhandler";
/**
* 执行器日志保存天数 [选填] :值大于3时生效,启用执行器Log文件定期清理功能,否则不生效;
*/
private Integer logRetentionDays = 30;
}
@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "xxl.job")
public class XxlJobProperties {
@NestedConfigurationProperty
private XxlJobAdminProperties admin;
@NestedConfigurationProperty
private XxlJobExecutorProperties executor;
}
xxl:
job:
admin:
address: http://192.168.56.10:8090/xxl-job-admin
executor:
address:
appname: xxl-job-executor-order
ip:
port: 9999
log-path: /data/applogs/xxl-job/jobhandler
log-retention-days: 30
access-token: default_token
特别提醒:在配置文件中配置 xxl-job 参数时,不要配置executor执行器的address 和 ip 这两个属性,自己配置容易出问题,使用默认的策略就好。
@Slf4j
@Configuration
public class XxlJobConfig {
@Bean
public XxlJobSpringExecutor xxlJobSpringExecutor(XxlJobProperties properties) {
XxlJobSpringExecutor executor = new XxlJobSpringExecutor();
executor.setAdminAddresses(properties.getAdmin().getAddress());
executor.setAddress(properties.getExecutor().getAddress());
executor.setAppname(properties.getExecutor().getAppname());
executor.setIp(properties.getExecutor().getIp());
executor.setPort(properties.getExecutor().getPort());
executor.setAccessToken(properties.getExecutor().getAccessToken());
executor.setLogPath(properties.getExecutor().getLogPath());
executor.setLogRetentionDays(properties.getExecutor().getLogRetentionDays());
return executor;
}
@XxlJob("xxlJobHandler")
public void xxlJobHandler() {
String jobParam = XxlJobHelper.getJobParam();
log.info("【xxlJobHandler】 定时任务开始执行,参数为:{}", jobParam);
}
}
上面的配置类 XxlJobConfig 中注入的Bean就是自定义定时任务执行器,执行器下方的方法,如下:
@XxlJob("xxlJobHandler")
public void xxlJobHandler() {
String jobParam = XxlJobHelper.getJobParam();
log.info("【xxlJobHandler】 定时任务开始执行,参数为:{}", jobParam);
}
这个是一个调度任务,@XxlJob("xxlJobHandler") 注解就可以声明一个调度任务,其中的值 xxlJobHandler 就是调度任务的名称
以上步骤做完先不要启动项目,还需要在xxl-job-admin 调度中心配置执行器和调度任务
来到 xxl-job-admin 调度中心,首先创建一个执行器,参考如下:
其中 AppName 为执行器名称,要和我们之前在配置文件中配置的执行器名称一致;名称 可以随便写,见名知意即可,注册方式 选择自动注册,选择自动注册后机器地址不用填。
添加完执行器后,再添加调度任务,操作如下:
最后,执行定时任务,效果如下:
需要注意的是,程序中调度任务在取调度中心的定时任务参数时,需要通过 XxlJobHelper 对象获取,例如:String jobParam = XxlJobHelper.getJobParam(); 不能直接使用方法参数接受。