4基于xxljob实现数据同步机制

理解定时任务调度机制
掌握Spring TaskScheduler的使用方法
掌握xxl-job的使用方法
任务调度解决哪些问题?

任务调度的概念

应用场景

任务调度的技术需求

  • 系统是复杂的,集群化的
  • 系统可能异常,如何应对错误
  • 系统级别的管理手段,平台化统一管理控制调度任务而不是简单的一个脚本、配置

任务调度开源方案

  • 单体
    • Quartz
    • Spring Task
  • 分布式
    • Elastic-job
    • xxl-job

任务调度的基础-Java执行器模型

spring任务调度器


注册BeanPostProcessor,它查找@Schedule注解的方法,启动ExecutorService,实现定时任务调度

Cron表达式

xxl-job应用方法

轻量级分布式任务调度框架
通过中心式调度平台,调度多执行器执行任务
提供可视化监控界面

数据模型

示例

启动xxl服务端

  • 下载代码 https://github.com/xuxueli/xxl-job.git
  • 执行脚本 /doc/db/tables_xxl_job.sql
  • 修改xxl-job-admin配置文件
    修改mysql地址,邮箱配置(password是授权码),token(客户端配置需与服务端一致)
  • 生成xxl-job-admin.jar并启动
    生成时需先install xxl-job-core 和xxl-job 到本地仓库

启动客户端

引入依赖

1
2
3
4
5
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.1</version>
</dependency>

配置

1
2
3
4
5
6
7
8
9
xxl:
job:
accessToken: default_token #与服务端配置一致
admin:
addresses: http://localhost:8082/xxl-job-admin
executor:
appname: demo1 # 客户端应用名称唯一,用于注册执行器
logpath: E:/logs
logretentiondays: 30

配置类

配置类,与服务端交互将执行器注册到服务端

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
@Configuration
@Slf4j
public class XxlJobConfig {

@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.logpath}")
private String logPath;

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


@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
log.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appName);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

return xxlJobSpringExecutor;
}
}

具体执行器代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Component
public class DemoXxlJobHandler {
private static Logger logger = LoggerFactory.getLogger(DemoXxlJobHandler.class);

@XxlJob("demoJobHandler")
public ReturnT<String> demoJobHandler(String param) throws Exception {
logger.info(new Date() + "Test Xxl-Job1");

return ReturnT.SUCCESS;
}
@XxlJob("demoJobHandler2")
public ReturnT<String> demoJobHandler2(String param) throws Exception {
logger.info(new Date() + "Test Xxl-Job2");

return ReturnT.SUCCESS;
}
}

配置服务平台

http://localhost:8082/xxl-job-admin
账号密码 admin/123456


启动任务调度:任务管理页面,操作列

qq1755982343