XXL-JOB github地址 github.com/xuxueli/xxl…
XXL-JOB 文档地址 www.xuxueli.com/xxl-job/
一. docker 部署调度中心
-
新建表 sql 语句在项目里
/xxl-job/doc/db/tables_xxl_job.sql在目标数据库执行语句建库、建表 -
拉取docker镜像
# docker pull xuxueli/xxl-job-admin:版本号
docker pull xuxueli/xxl-job-admin:2.3.0
- 启动
-e PARAMS后的参数可以在 github.com/xuxueli/xxl… 里参照
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/nbot?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=nbot --spring.datasource.password=ySbPqDWLo --xxl.job.accessToken=dasj2nd81jf9asjdkl5jk234" -p 2222:8080 --name xxl-job-admin -d xuxueli/xxl-job-admin:2.3.0
注意,mysql的地址如果是宿主机的,不要写成localhost或者127.0.0.1了,要写ip
xxl.job.accessToken= 是和客户端通信的token, 非空的时候启用, 如果不为空, 则客户端也需要填相同的token 在生产环境最好加上, 具体可见文档 www.xuxueli.com/xxl-job/#5.…
- 小错误 本机测试的时候,mysql 8 没有开允许远程访问,用如下方法解决
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
- 访问可视化界面
访问
http://localhost:8086/xxl-job-admin, 默认用户名密码:admin/123456
登录上去后,可以把默认的用户名密码改掉,可以添加用户等
二. 需要重构
- 邮件发送,需要使用自己的邮件发送方法,有自己的服务器,所以要重写源项目里的
在
xxl-job-admin的application.propertites里添加
# 邮件发送功能是否启用
spring.mail.enable=true
# 邮件服务器地址
spring.mail-api.url=
# 邮件发送服务的key
spring.mail-api.secretId=
# 邮件发送服务的密钥
spring.mail-api.secretKey=
三. 将已有的springboot项目变成执行器
- maven依赖
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version>
</dependency>
- 修改配置文件 修改springboot 项目的 application.propertites
### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-sample
### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=
### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30
- 注册服务 新建java类
@Slf4j
@Configuration
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:9998}")
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
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;
}
}
然后启动项目,可以看到日志理由相应xxl的信息打印
>>>>>>>>>>> xxl-job remoting server start success, nettype = class com.xxl.job.core.server.EmbedServer, port = 9999
等等,即注册成功
如果无法注册,即执行器列表没有我们刚刚启动的执行器,那就先首先在管理界面添加一下刚刚的执行器
(选自动注册)
然后,重启一下执行器项目,再次说新管理界面,然后我这就出现了自己的执行器
- 定时任务开发
@Slf4j
@Component
public class HelloWorldJobHandler {
/**
* 简单任务
*/
@XxlJob("sampleJobHandler")
public void executeSampleJobHandler() {
log.info("XXL-JOB, Hello World.");
}
}
更多实例见 github.com/xuxueli/xxl…
【参考】