多租户定时任务篇
多租户要做到数据的隔离,涉及到数据库,redis, mongodb, es等等。而定时任务作为操作数据的一个入口,也需要考虑进来。
前言
因为历史系统遗留原因,本篇以quartz定时任务为例,讲述它的启动细节,以及多租户处理。
一、先让quartz跑起来
启动springboot项目,版本2.7.0. quartz版本是目前最新的稳定版本是2.3.0,但spring-boot-starter-quartz
对应的版本是2.3.2
基于内存的是默认存储方式,虽然这种方式的性能更好,但是我们还是习惯于使用数据库存储,所以数据库依赖也一步位。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
配置一个任务:留意usingJobData
,它内部使用了Map,也是实现多租户隔离的机制
。
package com.example.qz.config;
import com.example.qz.job.FirstDemoJob;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author: jelex.xu
* @Date: 2025/1/9 09:38
* @desc:
**/
@Configuration
public class QuartzConfig {
@Bean
public JobDetail firstJobDetail(){
return JobBuilder.newJob(FirstDemoJob.class)
.withIdentity("firstJob")
.storeDurably()
.withDescription("firstJob测试")
.usingJobData("tenantId", "大庆")
.usingJobData