定时任务使用总结

定时任务表达式生成工具网站:https://cron.qqe2.com/

定时任务选型:

xxl-job 官方文档:https://www.xuxueli.com/xxl-job/

安装定时任务调度中心 xxl-job-admin

第一步、先导入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

spring boot项目整合 xxl-job

首先引入依赖:

<!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core -->
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.1</version>
</dependency>

安装好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 调度中心配置执行器和调度任务

准备执行 xxlJobHandler 调度任务

来到 xxl-job-admin 调度中心,首先创建一个执行器,参考如下:

其中 AppName 为执行器名称,要和我们之前在配置文件中配置的执行器名称一致;名称 可以随便写,见名知意即可,注册方式 选择自动注册,选择自动注册后机器地址不用填。

添加完执行器后,再添加调度任务,操作如下:

最后,执行定时任务,效果如下:

需要注意的是,程序中调度任务在取调度中心的定时任务参数时,需要通过 XxlJobHelper 对象获取,例如:String jobParam = XxlJobHelper.getJobParam();   不能直接使用方法参数接受。

猜你喜欢

转载自blog.csdn.net/python15397/article/details/129049223