# Quartz教程 - 8 持久化与集群
为什么要持久化?
默认情况下 Quartz 是保存在内存中的,如果不做持久化,系统停止或重启,任务将丢失;
另外如果做了持久化,可以在数据库中查看到有多少 JobDetail 和 Trigger。
为什么需要集群?
因为每台服务器运行的代码是一样的,那么一个定时任务如果被多个服务器运行,就会存在重复执行,另外集群可以保证系统的高可用性,一台服务器发生故障,还能保证系统的稳定运行。
集群是必须利用数据库将 Quartz 的信息保存到数据库中的,每台服务器通过读取数据库的数据抢占执行权限,因此将Quartz数据持久化到数据库是集群的基础。因此先讲解 Quartz 的持久化。
# 8.1 持久化
Quartz 持久化需要使用数据库,并在数据库中建立一些表,我们可以将这些表建在业务数据库中,也可以将这些表建立在独立的数据库中,如果建立在独立的数据库中,那么我们的系统需要配置多个数据源。一般情况下,建立在业务相关的数据库中即可。
# 1 引入依赖
需要在 SpringBoot 项目中,引入数据库连接和数据源的依赖。
在项目的 pom.xml 中添加依赖。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- 引入Spring封装的jdbc,内部默认依赖了 HikariDataSource 数据源-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 2 创建Job
和之前的是一样的 Job 类。
MyJob.java
package com.doubibiji.springbootquartz.job;
import lombok.extern.slf4j.Slf4j;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
@Slf4j
public class MyJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
log.info("执行定时任务");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 3 注册Job和Trigger
和之前的操作一样,创建一个 Quartz 的配置类,在这个配置类中,创建 JobDetail 和 Trigger,并将他们添加到Spring 容器中。
Quartz.config
内容未完......