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