SpringBoot集成XXL-JOB

 

 

第一步:下载xxl-job工程代码:

https://gitee.com/dongfangxuri/springboot

下下来工程如下:

 

 admin--->>后天管理,用于配置xxl-job各项数据

sample-springboot---->> 一个springboot集成xxl-job的demo 我们不用这个吗,用自己的

 core----------->> xxjob依赖的核心包,集成时候需要

 

 

简单说:

集成xxl-job需要两个节点:

1:admiin:后台管理

2:项目节点:用于集成xxljob

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

开始集成:

a:下下来项目找到:xxjob\xuxueli0323-xxl-job-master\xxl-job\doc\db

 

 

 新建数据库导入基表:

 

 

 

打开xxl-job-admin:

修改application.properties:

新增时区属性,否则乱码,然后启动admin 

1
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8&serverTimezone=UTC

  

访问:

http://localhost:8080/xxl-job-admin 账户/密码:admin/123456

登录后台:

 

 

 看到该页面即可

 

然后集成xxl-job:

自己项目引入xxl-job核心包:

复制代码
<!--xxjob-->
        <!-- https://mvnrepository.com/artifact/com.githup.liuyanggithup/xxl-job-core -->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.2.0-SNAPSHOT</version>  我这里是最新的2.0 这个根据自己情况看 与刚才下下来的core项目版本需要一致
        </dependency>
复制代码

 

首先在springboot项目中新增如下配置:

复制代码
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"  即刚才启动的admin的地址
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin    

### xxl-job executor address 执行器的名称 这个很重要
xxl.job.executor.appname=demo 与后台管理配置执行器名称一致
xxl.job.executor.ip=127.0.0.1  
xxl.job.executor.port=9999  如果是集群 不同的节点需要有不同的端口 比如 一个9999 一个9998

### xxl-job, access token
xxl.job.accessToken=

### xxl-job log path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job log retention days
xxl.job.executor.logretentiondays=30
复制代码

 

 

初始化xxl-job配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.example.demo.util;
 
import com.xxl.job.core.executor.XxlJobExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
 
    @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(initMethod = "start", destroyMethod = "destroy")
    public XxlJobExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        System.out.println("初始化成功了。。。。。。。。。。");
        XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();
        xxlJobExecutor.setAdminAddresses(adminAddresses);
        xxlJobExecutor.setAppName(appName);
        xxlJobExecutor.setIp(ip);
        xxlJobExecutor.setPort(port);
        xxlJobExecutor.setAccessToken(accessToken);
        xxlJobExecutor.setLogPath(logPath);
        xxlJobExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobExecutor;
    }
}

 

定时任务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example.demo.schedule;
 
import com.example.demo.util.MyUtil;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
 
@Component
public class MyTask1 extends IJobHandler {
 
    @Override
    public ReturnT<String> execute(String s) throws Exception {
        System.out.println("this is " + MyUtil.port + " MyTask1");
        testHelloWord();
        return ReturnT.SUCCESS;
    }
 
    public void testHelloWord() {
        System.out.println("hello word " + MyUtil.port + " MyTask1");
    }
}

   启动项目无报错,集成完毕。

 

 

配置后台管理:

 

 

 1:新增执行器:

 

 

 appName要与配置文件配置的xxl.job.executor.appname一模一样 不然找不到(重点):

自动注册会发现注册到admin的ip,我这里是集群两个节点,所以是两个(xxl.job.executor.port 需不同 )

保存

进入任务管理:

 

 

 

新增任务:

执行器即是刚才新建的执行器,选择一个即可,

 

 

 

这里有两个重点:

1:路由策略:第一个即集群环境下选择第一个节点执行,我们这里选择轮询,这次a,下次b

2:运行模式:我们选择GLUE(JAVA):即继承:

IJobHandler的这种实现方式:
复制代码
package com.example.demo.schedule;

import com.example.demo.util.MyUtil;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class MyTask1 extends IJobHandler {

    @Override
    public ReturnT<String> execute(String s) throws Exception {
        System.out.println("this is " + MyUtil.port + " MyTask1");
        testHelloWord();
        return ReturnT.SUCCESS;
    }

    public void testHelloWord() {
        System.out.println("hello word " + MyUtil.port + " MyTask1");
    }
}
复制代码

最后,需包这段代码复制到:(重点)

 

 

 

进入:

 

 

 

原则上,这里代码与程序代码一模一样,否则执行会有差异,根据情况去定夺

这样,我们即完成了springboot继承xxl-job的任务

 

但是一般开发中不可能是单任务单节点,所以,我们看下多任务,集群部署的配置,大同小异:

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我这里是两个定时任务:

 

 

 所以需要在admin配置两个:

 

 

 看我们执行器是一个地址列表:

 

 

 

所以会根据路由模式,去轮询

轮询结果:

 

 

 

 

 

 间隔2秒依次执行

 

 

在调度日志查看调度情况:

我这里配置如下:

posted @ 2022-05-05 17:49  满Sir  阅读(1128)  评论(0编辑  收藏  举报