XxlJob
运行模式
-
BEAN模式:任务以JobHandler方式维护在执行器端;需要结合 "JobHandler" 属性匹配执行器中任务;
-
GLUE模式(Java):任务以源码方式维护在调度中心;该模式的任务实际上是一段继承自IJobHandler的Java类代码并 "groovy" 源码方式维护,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务;
-
GLUE模式(Shell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "shell" 脚本;
-
GLUE模式(Python):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "python" 脚本;
-
GLUE模式(PHP):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "php" 脚本;
-
GLUE模式(NodeJS):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "nodejs" 脚本;
-
GLUE模式(PowerShell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "PowerShell" 脚本;
本文介绍java实现步骤
实现步骤
写入数据库
tables_xxl_job.sql(下方链接项目里有)
调度中心
xxl-job: 一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。下的xxl-job-admin
修改配置(必要)
### xxl-job, datasource spring.datasource.url=jdbc:mysql://*****:3306/***?characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false spring.datasource.username=root spring.datasource.password=***** spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
重要配置(可修改)
### web server.port=8080 server.servlet.context-path=/xxl-job-admin ### xxl-job, access token xxl.job.accessToken=default_token
-
server.port:暴露端口号
-
server.servlet.context-path:访问路径
-
xxl.job.accessToken:执行器与调度中心的通信token
执行器
xxl-job: 一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。下的xxl-job-exector-simples
修改配置(必要)
### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册; xxl.job.admin.addresses=http://****:8080/xxl-job-admin ### 执行器通讯TOKEN [选填]:非空时启用; xxl.job.accessToken=default_token ### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册 xxl.job.executor.appname=xxl-job-executor-sample
-
xxl.job.admin.addresses:调度中心访问地址
-
xxl.job.accessToken:执行器与调度中心的通信token(需与调度中心配置相同)
-
xxl.job.executor.appname:执行器AppName(执行器标识,调度中心根据该配置动态发现不同集群的在线执行器列表)
配置类
properties.java
@Data @Component @ConfigurationProperties(prefix = "xxl.job.executor") public class XxlJobExecutorProperties { private String appName; private String address; private String ip; private int port; private String logPath; private int logRetentionDays; }
config.java
@Slf4j @Configuration @RequiredArgsConstructor public class XxlJobConfig { @Value("${xxl.job.admin.addresses}") private String adminAddresses; @Value("${xxl.job.accessToken}") private String accessToken; private final XxlJobExecutorProperties xxlJobExecutorProperties; @Bean public XxlJobSpringExecutor xxlJobExecutor() { XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor.setAdminAddresses(adminAddresses); xxlJobSpringExecutor.setAppname(xxlJobExecutorProperties.getAppName()); xxlJobSpringExecutor.setAddress(xxlJobExecutorProperties.getAddress()); xxlJobSpringExecutor.setIp(xxlJobExecutorProperties.getIp()); xxlJobSpringExecutor.setPort(xxlJobExecutorProperties.getPort()); xxlJobSpringExecutor.setLogPath(xxlJobExecutorProperties.getLogPath()); xxlJobSpringExecutor.setLogRetentionDays(xxlJobExecutorProperties.getLogRetentionDays()); xxlJobSpringExecutor.setAccessToken(accessToken); log.info("<<<<<<<<xxl-job:{} 已注册>>>>>>>>", xxlJobExecutorProperties.getAppName()); return xxlJobSpringExecutor; } }
jobHandler
bean方法
代码
@Slf4j @Component public class RedisJobHandler { @XxlJob("testJobHandler") public void testJobHandler() { log.info("定时任务测试2"); XxlJobHelper.log("XXL-JOB, Hello World."); } }
使用@XxlJob()注解,value与执行器下的JobHandler内容一致,最号见名知义
BEAN类
任务添加与bean方法一致
代码
public class DemoJobHandler extends IJobHandler { @PostConstruct public void initJob(){ XxlJobExecutor.registJobHandler("demoJobHandler", new DemoJobHandler()); } @Override public void execute() throws Exception { XxlJobHelper.log("bean类handler"); } }
GLUE模式
代码
public class DemoJobHandler extends IJobHandler { @Override public void execute(String s) throws Exception { XxlJobHelper.log("bean类handler"); } }
继承IJobHandler 类实现execute方法,