springboot定时任务接入xxl-job

一、环境准备

下载镜像

docker pull xuxueli/xxl-job-admin:2.1.2

初始化数据库

通过xxl-job-admin/doc/db中的脚本初始化数据库
源码地址:https://github.com/xuxueli/xxl-job.git
在这里插入图片描述

启动服务

启动参数中设置数据库连接地址等,其中spring.mail.username为报警邮件的发送方spring.mail.password为邮箱的授权码,需到邮箱中设置,默认spring.mail.port为25,由于阿里云禁用25端口,所以如果服务部署在阿里云上,这个端口需要修改为465或者587

docker run 
-e PARAMS="--spring.datasource.url=jdbc:mysql://数据库IP:数据库端口/xxl_job?Unicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai  
--spring.mail.username=报警邮箱
--spring.mail.password=报警邮箱授权码
--spring.datasource.username=数据库账号
--spring.datasource.password=数据库密码
--spring.mail.port=587" 
-p 8082:8080 -v /home/xxl-job/logs:/data/applogs --name xxl-job-admin  -d  镜像ID

调度中心高可用

由于接入调度中心后,所有项目的定时任务都由调度中心接管,所以必须避免调度中心出现单点故障
xxl-job-admin的高可用不需要引入额外配置,只需要启动多个节点,并且连接同一数据库即可,不同节点通过对数据库加锁的形式,保证只有一台调度中心发起调用,即不会出现任务多次执行

preparedStatement = conn.prepareStatement(  "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );

大体流程是通过以上代码,先对数据加锁,然后查询需要执行的定时任务(未来5秒内),放入执行队列,再更新定时任务下一次的执行时间,最后释放锁。这样其他调度中心再来查询的时候,定时任务的执行时间已经更新了,所以不会出现重复执行的情况

二、项目接入

POM依赖

	<dependency>
			<groupId>com.xuxueli</groupId>
			<artifactId>xxl-job-core</artifactId>
			<version>2.1.2</version>
	</dependency>

配置文件

#调度中心
xxl:
  job:
    accessToken: ''
    admin:
      addresses: http://127.0.0.1:8080/xxl-job-admin
    executor:
      appname: 项目名
      ip: ''
      logpath: /data/applogs/xxl-job/项目名
      logretentiondays: 30
      port: 9999

配置类

@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}")
    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() {
        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;
    }
}

定时任务

方法上添加@XxlJob注解,返回类型为ReturnT<>,入参String(所在类要纳入Spring容器,如添加@Component注解)

@XxlJob("任务名")
	public ReturnT<String> demoJob(String param) {
		......
		任务逻辑
		......
		return ReturnT.SUCCESS; 
	}

调度中心新建执行器

登录调度中心:http://localhost:8080/xxl-job-admin
默认账号/密码 :admin/123456
执行器管理 -> 新建执行器
AppName为配置文件中的appname,注册方式选择自动注册,只有自动注册的执行器,才会动态更新实例清单,维持心跳(30秒一个心跳,90秒内没有心跳的实例会从清单中删除)

在这里插入图片描述
新建好执行器后,启动我们的项目,可以看到在执行器列表已经注册了自己的IP
在这里插入图片描述

调度中心新建任务

任务管理 -> 新建任务
在这里插入图片描述
选择执行器,运行模式选择Bean,jobHandler填@XxlJob注解的value值,cron设置任务执行时间,根据需要选择路由策略和阻塞处理策略(如无特殊需求,路由策略推荐轮询,阻塞处理策略推荐丢弃后续度),并设置重试次数,以及报警邮件接收方地址(多个地址逗号隔开,报警地址为空则不报警)

启动任务

在这里插入图片描述
状态更新为RUNNING
在这里插入图片描述

调度日志

通过调度日志,可以查看任务的执行情况
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值