XXL-JOB 是一个分布式任务调度平台,用于对定时任务进行管理、监控和执行。它可以支持多种任务调度场景,常用于数据定时同步、缓存定时更新等任务。在项目中使用 XXL-JOB 来对门户的缓存进行定时更新,可以确保缓存数据保持最新,减少缓存穿透或缓存雪崩等问题的发生。
官网:https://www.xuxueli.com/xxl-job/
1. 部署调度中心
可根据官网文档进行部署配置。
XXL-JOB 由调度中心和执行器组成。调度中心负责任务的管理和调度,执行器负责具体任务的执行。
2. 执行器
下边配置执行器,执行器负责与调度中心通信接收调度中心发起的任务调度请求,执行器负责执行微服务中定义的任务,执行器程序由xxl-job提供,在微服务中引入下边的依赖即加入了执行器的程序:
2.1 Maven 依赖
在项目中集成 XXL-JOB,首先需要在微服务中添加相应的依赖,以保证执行器能够在调度中心注册成功。
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version> <!-- 版本号可根据项目需求调整 -->
</dependency>
2.2 配置xxl-job
执行器的配置: 在微服务中编写 XXL-JOB 执行器的相关配置,配置内容包括调度中心的地址、执行器名称、IP 地址等。
配置文件示例:
xxl:
job:
admin:
addresses: http://localhost:8080/xxl-job-admin # 调度中心地址
executor:
appname: portal-cache-update-executor # 执行器名称
ip: # 可以为空,默认本机IP
port: 9999 # 执行器端口
logpath: /data/applogs/xxl-job/ # 日志文件存放路径
logretentiondays: 30 # 日志保留天数
2.3 进入调度中心添加执行器
进入调度中心,进入执行器管理界面,如下图:
AppName:执行名称,可以指定执行器名称就是微服务的应用名。
名称:取一个中文名称。
注册方式:自动注册,只要执行器和调度中心连通执行器会自动注册到调度中心
机器地址:自动注册时不用填写。
3. 定义缓存更新任务
3.1 编写任务执行方法
在微服务中,编写具体的任务执行逻辑,通常是一个用于更新缓存的任务方法,此任务方法由执行器去调用。可以通过 @XxlJob
注解来标识该方法为定时任务。
/**
* springCache缓存同步任务
*
* @author
* @create
**/
@Slf4j
@Component
public class SpringCacheSyncHandler {
@Resource
private RedisTemplate redisTemplate;
/**
* 已启用缓存更新
* 每日凌晨1点执行
*/
@XxlJob(value = "activeRegionCacheSync")
public void activeRegionCacheSync() {
log.info(">>>>>>>>开始进行缓存同步,更新已启用区域");
//1.清理缓存
String key = “xxx”;
redisTemplate.delete(key);
//2.刷新缓存
....
log.info(">>>>>>>>更新已启用区域完成");
}
}
3.2 配置任务
在 XXL-JOB 调度中心管理后台,可以配置定时任务,包括任务的执行时间、调度策略、执行器选择等。
配置步骤:
- 登录 XXL-JOB 管理后台。
- 在“任务管理”页面,添加一个新的任务,配置任务名称、描述、执行器、任务方法名(如
cacheUpdateJobHandler
)。 - 设置调度策略:选择
CRON
表达式,设置任务的执行时间,比如每天凌晨执行0 0 0 * * ?
。 - 选择调度策略:由于微服务可能部署多个实例,但只有一个实例需要执行任务,所以可以选择“第一个”策略(即只有一个实例会执行任务)。
- 保存并启用任务。