一. 引依赖
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.0.1</version>
</dependency>
二.yml配置文件配置调度器访问地址
xxl:
job:
admin:
addresses: http://192.168.22.67:8080/xxl-job-admin // 调度器访问地址
executor:
appname: intern-job //对应在xxl-job控制条新增执行器时,填写的APPNAME,执行器心跳注册分组依据
ip: 执行器IP默认为空表示自动获取ip,
port: 9998 // 执行器的默认端口为9999,port是一个内置的jetty服务端口
logpath: /data/xxl-job/jobhandler // 执行器运行日志文件存储的磁盘位置,需要对该路径拥有读写权限
logretentiondays: -1
accessToken:
三.装配配置类
package com.tfjybj.intern.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* xxl-job config
*
* @author xuxueli 2017-04-28
*/
@Configuration
@ComponentScan(basePackages = "com.tfjybj.intern.provider.job")
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppName(appName);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
四.开发代码,创建jobHandler执行器
@JobHandler(value = "UpdateLevelJob")
@Component
@Slf4j
public class UpdateLevelJob extends IJobHandler implements Serializable {
@Override
public ReturnT<String> execute(String s) {
// 参数s用来接收新建任务时设置的参数
XxlJobLogger.log(this.getClass().getSimpleName() + "--start");
......执行的逻辑
return ReturnT.SUCCESS;
}
}
- 通过XxlJobLogger.log 打印执行日志,打印的这些日志信息,点击xxl-job控制台中的调度日志中“执行日志”就可以看到,日志信息中包括:该任务的历史调度记录以及每一次调度的任务调度信息、执行参数和执行信息
- 我们在xxl-job控制台新建任务时,选择的运行模式为BEAN模式,任务逻辑以JobHandler的形式存在于“执行器”所在项目中,所以需要手动指定JobHandler
- 如果运行模式选择GLUE模式,任务以源码方式维护在调度中心,支持通过Web
IDE在线更新,实时编译和生效,因此不需要,因此不需要指定JobHandler - 每种运行模式的具体在执行器项目中如何开发,官网写的很清楚
五.新增执行器
- AppName:是每个执行器集群的唯一标示
- 注册方式选择手动录入时,机器地址才有效,这样支持人工维护执行器的地址信息。我们之所以用手动录入的方式,是因为我们有好多项目在用同一个xxl-job控制台,这样更利于维护各个项目的执行器,这样可清楚的知道是哪个项目的执行器
六.使用新增的执行器新增任务