因为自己开发的系统中需要使用到定时调度的情境,所以结合自己使用的Springboot项目框架,准备接入xxl-job定时调度平台。
1.先从xuxueli的GitHub上将xxl-job的源代码克隆一份到本地。
具体链接为https://github.com/xuxueli/xxl-job
git clone https://github.com/xuxueli/xxl-job.git
3.修改xxl-job-admin下的application.properties文件,将数据库链接改成自己的数据库对应的url,然后修改xxl的登录密码。最重要的是要指定服务端口以及上下文的名称。我这里使用了8888端口以及设置上下文名称为job
server.port=8888
server.context-path=/job
### xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl-job?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong
#我这里使用的是mysql8,所以数据库连接url需要一些特别的参数。
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
xxl.job.login.username=admin
xxl.job.login.password=123456
4.打包xxl-job-admin
我是用的是idea编译器,所以直接使用Maven工具进行打包。
我在打包的时候报过错,处理方式为:
(1)xxl-job的父工程先clean然后再install
(2)install xxl-job-admin
具体如图:(注意顺序)
打包成功以后,在xxl-job-admin/target文件夹下会出现一个jar包
5.部署:看你是要部署在哪里。反正都是一样的操作
把jar包复制到你自定义的目录下,启动服务
java -jar xxxx.jar
出现这个信息就证明成功了
6.初步测试,在浏览器端输入http://localhost:8888/job/
(该url根据3中你自己定义的端口以及上下文,结合所在的IP使用)。输入自己填写的账户密码进入系统
到此xxl-job独立服务端的初步部署已经完成,下面进入整合阶段。
7.新建Springboot项目,具体操作自行百度,这里就不赘述了。
项目新建成功以后,
(1)在pom.xml引入xxl-job的依赖
com.xuxueli
xxl-job-core
2.0.1
(2)在application.yml/application.properties中配置相关信息
xxl:
job:
admin:
addresses:
http://127.0.0.1:8888/job # 调度器访问地址
executor:
appname: blog-job
#对应在xxl-job控制条新增执行器时,填写的APPNAME,执行器心跳注册分组依据
ip:
#执行器IP默认为空表示自动获取ip,
port: 9998
# 执行器的默认端口为9999,port是一个内置的jetty服务端口
logpath: /xxl-job/jobhandler
# 执行器运行日志文件存储的磁盘位置,需要对该路径拥有读写权限
logretentiondays: -1
accessToken:
8.新建XxlJobConfig.java
package com.linkk.blog.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.linkk.blog.xxl")
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;
}
}
然后新建demoJob.java
package com.linkk.blog.xxl;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.Serializable;
@JobHandler(value = "demoJob")
@Component
@Slf4j
public class demoJob extends IJobHandler implements Serializable {
@Override
public ReturnT execute(String s) {
log.info("test");
XxlJobLogger.log(this.getClass().getSimpleName() + "--start");
return ReturnT.SUCCESS;
}
}
9.进入刚才已经启动的系统页面中
点击执行器管理,新增执行器
然后将application.yml里面的appname填写进去
接下来点击任务管理,新增,添加定时任务。
启动定时任务,然后查看日志,调度结果显示成功就可以了。
注意:添加定时器时一定要是自己已经编写的集成了IJobHandler的@JobHandler(value = “xxxx”)里的value,否则会出现错误
成功以后你想干嘛就干嘛吧,看日志瞎捣鼓都行了~