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; }