SpringBoot集成xxl-job

概述       

        项目开发过程中,往往会有这样的业务场景:硬件设备会发给接收平台发送实时数据,而项目中还需要小时、日、月等数据,这时就需要定时触发一些计算任务,来将实时数据汇总成分钟、小时、日、月数据。jdk也提供定时任务执行类,比如Timer和TimerTask。现在给大家推荐一个执行定时任务的小工具,xxl-job。开源项目,大家可下载源代码。

GitHub - xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)A distributed task scheduling framework.(分布式任务调度平台XXL-JOB) - GitHub - xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)icon-default.png?t=N7T8https://github.com/xuxueli/xxl-job

工作原理

以下是本人理解的xxl-job的工作原理,官方也有工作原理的说明。

集成xxl-job

集成分两步:1 需要运行xxl-job-admin工程;2 业务工程集成

运行xxl-job-admin工程

下载源代码后,需要运行xxl-job-admin工程。此工程是任务调度的管理端,需要数据库支持,本例使用Mysql数据。在本地Mysql上运行初始化建库及建表语句(sql文件为doc/db下的tables_xxl_job.sql)。若mysql在远程服务器上,需修改工程application.properties文件中数据库连接变量,如下:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai

运行成功后,访问http://localhost:8080/xxl-job-admin,成功如下:

默认登录用户:admin/123456

业务工程集成

  • maven引入
<dependency>
	<groupId>com.xuxueli</groupId>
	<artifactId>xxl-job-core</artifactId>
	<version>2.2.1-SNAPSHOT</version>
</dependency>
  • 增加配置类
@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.appname}")
    private String appname;

    @Value("${xxl.job.executor.address}")
    private String address;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setAddress(address);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }

}
  • 配置文件application.yml增加配置
xxl:
  job:
    accessToken:
    admin:
      addresses: http://localhost:8080/xxl-job-admin //xxl-job admin地址
      username: admin //xxl-job地址登录用户名
      password: 123456 //xxl-job地址登录密码
    executor:
      address:
      ip:
      appname: xxl-job-executor-sample  //执行器名称,可在任务调度中心下的执行器管理中增加
      port: 9999
      logpath: ./xxl-job/jobhandler
      logretentiondays: 1
  • 配置部分完成,下面就是业务代码部分
@XxlJob("demoJobHandler")
   public ReturnT<String> testScheduler(String param) {
        try {
            //param 可接收任务传输参数,根据传输参数做业务逻辑处理
            //定时执行业务代码
            return new ReturnT<>("任务处理成功");
        } catch (Exception e) {
            e.printStackTrace();
            return new ReturnT<>(500, "任务处理失败" + "原因是" + e.getMessage());
        }
    }

demoJobHandler需要在任务调度中心的任务管理中增加任务,与任务中的JobHandler对应,且执行器为application.yml配置文件中xxl.job.executor.appname设置的xxl-job-executor-sample。

验证

代码部分结束,下面就可以验证了。

运行工程中打印以下红框部分表示注册xxl-job成功

注册成功后,可在执行器管理中看到执行器xxl-job-executor-sample有1个在线机器地址。

若提示以下信息,则表示注册xxl-job失败

 需要检查配置文件中以下配置是否正确

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值