XXL-JOB
xxl-job
是一个分布式任务调度平台。
快速开始
xxl-job
采用控制面和数据面分离的架构。xxl-job-admin
是xxl-job
的调度中心,负责管理执行器和任务、同时负责任务调度。
xxl-job-admin
可以利用官方提供源码已经打包部署或者使用Docker
官方的镜像进行部署。这里并不进行介绍。下面主要介绍执行器的安装配置以及使用方法。
安装与配置
- 添加Maven依赖
1 2 3 4 5 6 7
| <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>${最新稳定版本}</version> </dependency>
|
- 增加配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin xxl.job.accessToken= xxl.job.executor.appname=xxl-job-executor-sample xxl.job.executor.address= xxl.job.executor.ip= xxl.job.executor.port=9999 xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler xxl.job.executor.logretentiondays=30
|
- xxl.job.accessToken: 是访问调度中心的有效凭证。这个值在调度中心部署的时候进行设置的话,那么执行器也要设置成一样的值。如果调度中心没有设置的话,则可以设置为空。
- xxl.job.executor.appname: 是执行器的名称。如果为空会关闭自动注册。
- xxl.job.executor.address: 是执行器在调度中心注册的回调地址。与下面的ip和port配置冲突。
- xxl.job.executor.ip: 是执行器在调度中心注册的回调地址ip
- xxl.job.executor.port: 是执行器在调度中心注册的回调地址端口
xxl.job.executor.address和xxl.job.executor.ip需要配置成调度中心能够访问的IP。否则调度中心无法回调触发任务执行。
- 配置相关启动类
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 35 36 37 38 39 40 41 42 43 44 45 46
| @Configuration public class XxlJobConfig {
private final Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@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.address}") private String address;
@Value("${xxl.job.executor.ip}") private String ip;
@Value("${xxl.job.executor.port}") private int port;
@Value("${xxl.job.executor.logpath}") private String logPath;
@Value("${xxl.job.executor.logretentiondays}") private int logRetentionDays;
@Bean public XxlJobSpringExecutor xxlJobExecutor() { logger.info(">>>>>>>>>>> xxl-job config init."); XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor.setAdminAddresses(adminAddresses); xxlJobSpringExecutor.setAppname(appname); xxlJobSpringExecutor.setAddress(address); xxlJobSpringExecutor.setIp(ip); xxlJobSpringExecutor.setPort(port); xxlJobSpringExecutor.setAccessToken(accessToken); xxlJobSpringExecutor.setLogPath(logPath); xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); return xxlJobSpringExecutor; } }
|
使用
XXL-JOB
提供了丰富的使用模式。下面主要介绍基于Bean模式的类形式和方法形式。其他模式可以参考官网的说明。
1. 类形式
类形式任务类需要继承com.xxl.job.core.handler.IJobHandler
,业务逻辑通过重写的execute
方法实现。同时,需要通过下述代码进行配置。
1
| XxlJobExecutor.registJobHandler("demoJobHandler",new DemoJobHandler());
|
推荐使用Spring的InitializingBean
在afterPropertiesSet
回调方法中进行注册。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @Component public class XxlJobBeanDemoHandler extends IJobHandler implements InitializingBean {
@Override public void execute() throws Exception { XxlJobHelper.log("XXL-JOB, Bean Mode Hello World."); }
@Override public void afterPropertiesSet() throws Exception { XxlJobExecutor.registJobHandler("xxlJobBeanDemoHandler", this); } }
|
2. 方法形式
方法形式则需要继承任何类,同时一个类可以有多个方法是任务处理器。
只需要在对应方法上,加上@XxlJob
注解即可。
1 2 3 4 5 6 7 8 9
| @Component public class XxlJobBeanShardDemoHandler {
@XxlJob("helloWorldBeanShardJobHandler") public void execute() throws Exception { XxlJobHelper.log("XXL-JOB, Bean Mode Hello World."); } }
|
参考文档