docker 部署xxl-job调度中心

10,739 阅读3分钟

XXL-JOB github地址 github.com/xuxueli/xxl…

XXL-JOB 文档地址 www.xuxueli.com/xxl-job/

一. docker 部署调度中心

  1. 新建表 sql 语句在项目里 /xxl-job/doc/db/tables_xxl_job.sql 在目标数据库执行语句建库、建表

  2. 拉取docker镜像

# docker pull xuxueli/xxl-job-admin:版本号

docker pull xuxueli/xxl-job-admin:2.3.0
  1. 启动 -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.…

  1. 小错误 本机测试的时候,mysql 8 没有开允许远程访问,用如下方法解决
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
  1. 访问可视化界面 访问 http://localhost:8086/xxl-job-admin, 默认用户名密码:admin/123456

登录上去后,可以把默认的用户名密码改掉,可以添加用户等

二. 需要重构

  1. 邮件发送,需要使用自己的邮件发送方法,有自己的服务器,所以要重写源项目里的 在xxl-job-adminapplication.propertites里添加
# 邮件发送功能是否启用
spring.mail.enable=true
# 邮件服务器地址
spring.mail-api.url=
# 邮件发送服务的key
spring.mail-api.secretId=
# 邮件发送服务的密钥
spring.mail-api.secretKey=

三. 将已有的springboot项目变成执行器

  1. maven依赖
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version>
</dependency>

  1. 修改配置文件 修改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
  1. 注册服务 新建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 

等等,即注册成功

如果无法注册,即执行器列表没有我们刚刚启动的执行器,那就先首先在管理界面添加一下刚刚的执行器

Inked屏幕截图_LI.jpg (选自动注册)

然后,重启一下执行器项目,再次说新管理界面,然后我这就出现了自己的执行器

  1. 定时任务开发
@Slf4j
@Component
public class HelloWorldJobHandler {

    /**
     * 简单任务
     */
    @XxlJob("sampleJobHandler")
    public void executeSampleJobHandler() {
        log.info("XXL-JOB, Hello World.");
    }
}

更多实例见 github.com/xuxueli/xxl…

【参考】

  1. www.xuxueli.com/xxl-job/#%E…
  2. juejin.cn/post/684490…