通常情况下,我们在开发java项目的使用会用到定时任务,如果不做分布式的话。只需要是使用Spring自带的Schedule就可以了。但是有的时候需要一些可配置的定时任务比如quartz的定时任务,但是集成quartz比较繁琐。所以xxl-job是一个比较友好,而且易于开发的分布式定时任务。xxl-job开源社区
下面我们说下如何集成xxl-job
搭建xxl-job
下载xxl-job,地址在:https://github.com/xuxueli/xxl-job/
然后导入到IDEA中,启动。
地址:http://localhost:8080/xxl-job-admin/
用户名和密码:admin admin
如果页面出现,这样就说明xxl-job启动了。
SpringBoot集成xxl-job
1:准备合适的jar包。
springBoot如果需要引入xxl-job一定要注意,必须要有spring-boot-starter-web。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
这是因为xxl-job是使用的AOP,这个时候如果没有web会出现
c.xxl.job.core.executor.XxlJobExecutor : null
所以请注意需要web包。
接着需要xxl-job的包
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.2.0</version> </dependency>
这样包的问题就解决了。
2:准备配置文件
(1):在application.yml
xxl:
job:
admin:
addresses: http://127.0.0.1:8080/xxl-job-admin
executor:
ip:
port: 9999
logpath: /data/applogs/xxl-job/jobhandler
appname: xxl-job-demo-application
accessToken:
(2):在application.properties
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### xxl-job, access token
xxl.job.accessToken=
### xxl-job executor appname
xxl.job.executor.appname=xxl-job-demo-application
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9999
### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30
特别注意:
xxl.job.admin.addresses 这个是xxl-jobi启动时候的路径地址
xxl.job.executor.appname 这个是springBoot项目需要注册到xxl-job的名称(如果正常启动,在xxl-job的管理界面中的执行器管理中会看到我们注册的xxl.job.executro.appname的执行器,并且会自动注册,显示注册节点)
xxl.job.executor.port 这个端口就是xxl-job启动时候的端口,通常是9999
3:准备XxljobConfig配置文件
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.Configuration;
@Configuration
public class XxlJobConfig {
private static 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;
}
}
这样就完成了springBoot集成xxl-job了。