前言:xxl-job是一个轻量级分布式任务调度平台,此处是使用改调度平台实现项目中定时任务的运行
1、增加依赖
<!--xxl-job分布式任务执行器-->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.1.2</version>
</dependency>
2、增加配置文件
XxlJobConfig:
package com.cmf.demo.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.Data;
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.Configuration;
import org.springframework.stereotype.Component;
@Configuration
@Data
@Component
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.executor.logretentiondays}")
private int logRetentionDays;
//@Bean(initMethod = "start", destroyMethod = "destroy") 版本更新前
//@Bean 版本更新后
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.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
3、配置项
xxl:
job:
admin:
addresses: http://ip地址:端口号/xxl-job-admin #前端调度中心地址 这里用的项目中的地址,这里具体地址怎么配,还不是太清楚????
executor:
ip: 127.0.0.1 #执行器机器ip;默认为空时自动获取ip
port: 1111 #执行器端口,调度中心给执行器发送任务通过此端口
appname: demo-cmf #执行器名称,唯一
logretentiondays: 30 #本地之日保存天数,-1为永远保存
4、运行报错
Exception in thread "Thread-32" java.net.BindException: Address already in use: bind
看着是端口号冲突,所以我去查了下,但是本地也没有端口号和这个项目一样的,百度后发现是由于配置类XxlJobConfig 中@Bean(…)使用了更新前的语法,改为@Bean 就可以了。
另外如果yml配置文件中的addresses没有正确配置也会报错,至于这个地址是怎么得来的,还在学习中。。
5、配置定时任务
package com.cmf.demo.service.timetask;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class TestXXLTimeTask {
@XxlJob(value = "send_info")
public ReturnT<String> sendInfo(String param) {
log.info("hello xxl-job");
return ReturnT.SUCCESS;
}
}
xxl-job定时任务返回值必须是ReturnT,入参必须是String param;否则运行会报错、
6、页面配置如下:
先新增执行器:执行器端口和名称是前面yml文件配置的
这里配置完之后,点击操作下面的启动,就会自动调用步骤5写的定时任务里面的方法。