正文
整个项目导入idea后,先看一下结构:
结合着文档和代码,先梳理一下各个模块都是干什么的:
-
xxl-job-admin
:任务调度中心,启动后就可以访问管理页面,进行执行器和任务的注册、以及任务调用等功能了
-
xxl-job-core
:公共依赖,项目中使用到xxl-job时要引入的依赖包
-
xxl-job-executor-samples
:执行示例,分别包含了springboot版本和不使用框架的版本
为了弄清楚注册和查询
executor
和
jobHandler
调用的是哪些接口,我们先从页面上去抓一个请求看看:
好了,这样就能定位到
xxl-job-admin
模块中
/jobgroup/save
这个接口,接下来可以很容易地找到源码位置:
按照这个思路,可以找到下面这几个关键接口:
-
/jobgroup/pageList
:执行器列表的条件查询
-
-
/jobinfo/pageList
:任务列表的条件查询
-
但是如果直接调用这些接口,那么就会发现它会跳转到
xxl-job-admin
的的登录页面:
其实想想也明白,出于安全性考虑,调度中心的接口也不可能允许裸调的。那么再回头看一下刚才页面上的请求就会发现,它在
Headers
中添加了一条名为
XXL_JOB_LOGIN_IDENTITY
的
cookie
:
至于这条
cookie
,则是在通过用户名和密码调用调度中心的
/login
接口时返回的,在返回的
response
可以直接拿到。只要保存下来,并在之后每次请求时携带,就能够正常访问其他接口了。
到这里,我们需要的5个接口就基本准备齐了,接下来准备开始正式的改造工作。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
-
项目地址:https://github.com/YunaiV/ruoyi-vue-pro
-
视频教程:https://doc.iocoder.cn/video/
我们改造的目的是实现一个
starter
,以后只要引入这个
starter
就能实现
executor
和
jobHandler
的自动注册,要引入的关键依赖有下面两个:
<dependency>
<groupId>com.xuxueligroupId>
<artifactId>xxl-job-coreartifactId>
<version>2.3.0version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-autoconfigureartifactId>
dependency>
在调用调度中心的接口前,先把
xxl-job-admin
模块中的
XxlJobInfo
和
XxlJobGroup
这两个类拿到我们的starter项目中,用于接收接口调用的结果。
创建一个
JobLoginService
,在调用业务接口前,需要通过登录接口获取
cookie
,并在获取到
cookie
后,缓存到本地的
Map
中。
private final Map loginCookie=new HashMap<>();
public void login() {
String url=adminAddresses+"/login";
HttpResponse response = HttpRequest.post(url)
.form("userName",username)
.form("password",password)
.execute();
List cookies = response.getCookies();
Optional cookieOpt = cookies.stream()
.filter(cookie -> cookie.getName().equals("XXL_JOB_LOGIN_IDENTITY"