最后
作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料
- mvn clean package -Dmaven.test.skip=true
3.3. 访问调度中心
-
调度中心访问地址:http://localhost:8080/xxl-job-admin (
该地址执行器配置文件xxl.job.admin.addresses将会使用到,作为回调地址
) -
默认登录账号 “admin/123456”, 登录后运行界面如下图所示。
4. 配置部署执行器项目
-
“执行器”项目:xxl-job-executor-sample-springboot (提供多种版本执行器供选择,现以 springboot 版本为例,
可直接使用,也可以参考其并将现有项目改造成执行器
) -
作用:负责接收“调度中心”的调度并执行;可直接部署执行器,也可以将执行器集成到现有业务项目中。
-
原理:
-
执行器实际上是一个内嵌的Server,默认端口9999(配置项:xxl.job.executor.port)。
-
在项目启动时,执行器会通过“@JobHandler”识别Spring容器中“Bean模式任务”,以注解的value属性为key管理起来。
-
“执行器”接收到“调度中心”的调度请求时,如果任务类型为“Bean模式”,将会匹配Spring容器中的“Bean模式任务”,然后调用其execute方法,执行任务逻辑。如果任务类型为“GLUE模式”,将会加载GLue代码,实例化Java对象,注入依赖的Spring服务(注意:Glue代码中注入的Spring服务,必须存在与该“执行器”项目的Spring容器中),然后调用execute方法,执行任务逻辑。
4.1 maven依赖
- 执行器项目需要引入 “xxl-job-core” 的maven依赖,版本要和注册中心版本一致
com.xuxueli
xxl-job-core
${project.parent.version}
复制代码
4.2 修改配置文件:
-
xxl-job-executor-sample-springboot/src/main/resources/application.properties
-
修改调度中心部署跟地址
-
需修改或自定义
-
xxl.job.admin.addresses 地址
-
xxl.job.executor.appname 自定义名称,后台配置必须对应
-
xxl.job.executor.ip 当前电脑Ip,或部署项目的电脑Ip
-
xxl.job.executor.port 端口
-
xxl.job.accessToken 自定义的token,要和admin模块配置的一致
调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
xxl-job, access token 自定义的token,要和admin模块配置的一致
xxl.job.accessToken=ljwtoken
xxl-job executor appname 自定义名称,后台配置必须对应
xxl.job.executor.appname=xxl-job-executor-sample
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=127.0.0.1
xxl.job.executor.port=9999
复制代码
4.3 执行器组件配置 要配置执行器组件,配置文件参考地址:/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java
@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;
}
复制代码
4.4 部署执行器项目
-
如果已经正确进行上述配置,将执行器项目编译打部署,我们使用springboot项目,打包运行xxl-job-executor-sample-springboot即可
-
mvn clean package -Dmaven.test.skip=true
5. GLUE模式(Java)开发一个任务
-
GLUE模式(Java)原理:任务以源码方式维护在调度中心;该模式的任务实际上是一段继承自IJobHandler的Java类代码并 “groovy” 源码方式维护,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务(请确保Glue代码中的服务和类引用在“执行器”项目中存在),然后调用该对象的execute方法,执行任务逻辑。
-
GLUE模式(Java)就是在界面编写代码即可,不用在执行器项目中编写代码
5.1 新建任务
- 登录调度中心,点击下图所示“新增”按钮,新建示例任务。然后,参考下面截图中任务的参数配置,点击保存。
5.2 “GLUE模式(Java)” 任务开发
- 请点击任务右侧 “GLUE IDE” 按钮,进入 “GLUE编辑器开发界面” ,见下图。“GLUE模式(Java)” 运行模式的任务默认已经初始化了示例任务代码,即打印Hello World。
5.3 触发执行
- 请点击任务右侧 “执行一次” 按钮,可手动触发一次任务执行(通常情况下,通过配置Cron表达式进行任务调度触发)。
5.4 查看日志:
-
请点击任务右侧 “调度日志” 按钮,可前往任务日志界面查看任务日志。
-
在任务日志界面中,可查看该任务的历史调度记录以及每一次调度的任务调度信息、执行参数和执行信息。运行中的任务点击右侧的“执行日志”按钮,可进入日志控制台查看实时执行日志。
6. BEAN模式开发一个任务
- BEAN模式原理:任务以JobHandler方式维护在执行器端;需要结合 “JobHandler” ,任务类需要加“@JobHandler(value=“名称”)”注解,因为“执行器”会根据该注解识别Spring容器中的任务。任务类需要继承统一接口“IJobHandler”,任务逻辑在execute方法中开发,因为“执行器”在接收到调度中心的调度请求时,将会调用“IJobHandler”的execute方法,执行任务逻辑。
6.1 类形式
6.1.1 优缺点
-
Bean模式任务,支持基于类的开发方式,每个任务对应一个Java类。
-
优点:
-
不限制项目环境,兼容性好。即使是无框架项目,如main方法直接启动的项目也可以提供支持
-
缺点:
-
每个任务需要占用一个Java类,造成类的浪费;
-
不支持自动扫描任务并注入到执行器容器,需要手动注入。
6.1.2 执行器项目中,开发Job类
-
1、开发一个继承自"com.xxl.job.core.handler.IJobHandler"的JobHandler类,实现其中任务方法。
-
2、手动通过如下方式注入到执行器容器。
-
:XxlJobExecutor.registJobHandler(“demoJobHandler”, new DemoJobHandler());
注:版本v2.2.0 移除旧类注解@JobHandler,推荐使用基于方法注解@XxlJob的方式进行任务开发;(如需保留类注解JobHandler使用方式,可以参考旧版逻辑定制开发);
public class MyJobHandler extends IJobHandler {
@Override
public void execute() throws Exception {
XxlJobHelper.log(“11MyJobHandler===”);
System.out.println(“22MyJobHandler===”);
}
}
复制代码
注入myJobHandler:
@SpringBootApplication
public class XxlJobExecutorApplication {
public static void main(String[] args) {
SpringApplication.run(XxlJobExecutorApplication.class, args);
XxlJobExecutor.registJobHandler(“myJobHandler”, new MyJobHandler());
}
}
复制代码
6.1.3 调度中心,新建调度任务
- JobHandler填写@JobHandler的value值
- 新建后可以测试运行一次查看日志是否成功
6.2 方法形式
6.2.1 优缺点
-
基于方法开发的任务,底层会生成JobHandler代理,和基于类的方式一样,任务也会以JobHandler的形式存在于执行器任务容器中。
-
优点:
-
每个任务只需要开发一个方法,并添加@XxlJob注解即可,更加方便、快速。
-
支持自动扫描任务并注入到执行器容器。
-
缺点:要求Spring容器环境
6.2.2 执行器项目中,开发Job方法
-
- 任务开发:在Spring Bean实例中,开发Job方法
-
- 注解配置:为Job方法添加注解 “@XxlJob(value=“自定义jobhandler名称”, init = “JobHandler初始化方法”, destroy = “JobHandler销毁方法”)”,注解value值对应的是调度中心新建任务的JobHandler属性的值。
-
- 执行日志:需要通过 “XxlJobHelper.log” 打印执行日志
-
- 任务结果:默认任务结果为 “成功” 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 “XxlJobHelper.handleFail/handleSuccess” 自主设置任务结果
@Configuration
public class MyXxlJobConfig {
@XxlJob(“myXxlJobConfig”)
public boolean demoJobHandler() throws Exception {
XxlJobHelper.log(“myXxlJobConfig====”);
System.out.println(“myXxlJobConfig====”);
//ReturnT无作用
//return new ReturnT(200, “hahahahah”);
return XxlJobHelper.handleSuccess(“myXxlJobConfig hello world”);
}
@XxlJob(“myfaile”)
public boolean myfaile() throws Exception {
XxlJobHelper.log(“myfaile====”);
System.out.println(“myfaile====”);
return XxlJobHelper.handleFail(“myfaile hello world”);
}
/**
- 5、生命周期任务示例:任务初始化与销毁时,支持自定义相关逻辑;init只在第一次调度时执行一次。destroy每次调度都执行
*/
@XxlJob(value = “demoJobHandler2”, init = “init”, destroy = “destroy”)
public void demoJobHandler2() throws Exception {
System.out.println(“demoJobHandler2====”);
XxlJobHelper.log(“XXL-JOB, Hello World.”);
}
public void init() {
System.out.println(“init====”);
logger.info(“init”);
}
public void destroy() {
System.out.println(“destory====”);
logger.info(“destory”);
}
总结
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
大厂面试场景
知识点总结
一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
[外链图片转存中…(img-qQYvDnH6-1715421433254)]
大厂面试场景
[外链图片转存中…(img-FOevuCSW-1715421433254)]
知识点总结
[外链图片转存中…(img-MpkOKqMj-1715421433255)]