xxl-job

下载:

https://gitee.com/xuxueli0323/xxl-job/tags

选择一个双数版本,例如:2.2.0版本。

  • 初始化数据库 执行脚本
  /xxl-job/doc/db/tables_xxl_job.sql
  • 修改配置文件
    进入到xxl-job-admin项目中,修改配置文件application.properties(在文件夹xxl-job-admin\src\main\resources下)中的端口号, 数据库用户名及密码也改成本地的用户名和密码;
  • 编译运行xxl-job-admin
    在xxl-job-admin目录中运行下面的命令:
  mvn spring-boot:run
  • 登录xxl-job-admin 地址 http://localhost:9999/xxl-job-admin/ 的缺省密码
  admin/123456

介绍:

主要涉及到两个概念

执行器

执行器用来执行任务的对象XxlJobSpringExecutor,XxlJobSpringExecutor定义在我们自己的项目中,它的名称用来在xxl-job-admin中标识某个项目。 设置执行器
执行器 设置任务 任务

任务

任务是真正执行逻辑的地方,它的运营受到xxl-job-admin的指挥。

在项目中使用

引入依赖

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

添加配置

xxl:
  job:
    port: 9998   # xxl-job服务本地监听端口,如果有多个需要使用不同的端口
    accessToken: ""
    admin:
      addresses: http://localhost:9999/xxl-job-admin  # 这里的端口需要跟上文中在xxl-job-admin中配置的端口号一致
    executor: # 执行器,负责和xxl-job-admin通信
      appName: contract # 执行器名称,在xxl-job-admin中定义执行器时需要使用这里定义的名字。
      logpath: D:\tmp\logs # xxl执行器日志存放地址
      logretentiondays: 10 # 日志保留多少天

初始化

在这里使用上面的配合信息,构建一个执行器实例。

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

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

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


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(this.adminAddress);
        xxlJobSpringExecutor.setAppname(this.appName);
        xxlJobSpringExecutor.setLogPath(this.logPath);
        xxlJobSpringExecutor.setLogRetentionDays(this.logRententionDays);
        xxlJobSpringExecutor.setPort(port);
        return xxlJobSpringExecutor;
    }

Handler

定时任务中的任务,由它来完成真正的工作。


    @XxlJob("payCreatorForOld")
    public ReturnT<String> updateOldContract(String param) {
        List<Contract> contracts = contractService.getOldContract();
        contracts.stream().forEach(contract -> {
            try {
                log.debug("===================>>>>>>>>>");
                rocketMQService.syncSend(contract);
            } catch (JsonProcessingException e) {
                throw new RuntimeException(e);
            }
        });
        XxlJobLogger.log("XXl-job for old  "+ param);
        return ReturnT.SUCCESS;
    }