2025-06-03T17:24:00.212+08:00 INFO 18124 --- [ main] org.quartz.core.QuartzScheduler : Scheduler meta-data: Quartz Scheduler (v2.3.2) 'quartzScheduler' with instanceId 'NON_CLUSTERED' Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. NOT STARTED. Currently in standby mode. Number of jobs executed: 0 Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
时间: 2025-06-03 20:20:08 浏览: 28
### Quartz Scheduler 日志信息与配置细节
Quartz Scheduler 是一个功能强大的任务调度框架,能够满足多种复杂场景下的定时任务需求。以下是关于日志信息和配置细节的详细解析。
#### 1. 日志信息解析
在执行 Quartz Scheduler 后的日志中[^1],可以提取到以下关键信息:
- **Scheduler 版本**:v2.2.1(注意用户提问的是 v2.3.2,但此处日志版本为 v2.2.1)。
- **实例 ID**:`NON_CLUSTERED`,表示当前 Scheduler 实例运行在非集群模式下。
- **启动时间**:`Sun Jul 09 15:15:17 CST 2017`。
- **线程池**:使用了 `org.quartz.simpl.SimpleThreadPool`,默认线程数为 10。
- **Job 存储**:使用了 `org.quartz.simpl.RAMJobStore`,这意味着所有的 Job 和 Trigger 数据都存储在内存中,不支持持久化,并且是非集群化的。
日志中的 `[INFO]-[org.ws.quartz.test2.SchedulerExample] scheudler started` 表明 Scheduler 已成功启动,而 `Not currently in standby mode` 表示当前 Scheduler 不处于待机状态。
#### 2. 配置细节解析
##### (1)线程池配置
Quartz 使用的线程池是 `SimpleThreadPool`,其默认配置如下:
- 线程数量:10(可以通过配置文件调整)。
- 线程名称前缀:`QuartzWorker-`。
- 线程优先级:`Thread.NORM_PRIORITY`。
如果需要自定义线程池配置,可以在 `quartz.properties` 文件中进行设置:
```properties
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 20
org.quartz.threadPool.threadPriority = 5
```
##### (2)RAMJobStore 配置
RAMJobStore 是 Quartz 的默认 Job 存储方式,所有数据都存储在内存中。这种存储方式的优点是性能高、配置简单,但缺点是无法持久化数据,重启后会丢失所有任务信息。
配置示例如下:
```properties
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
```
##### (3)NON_CLUSTERED 模式
`NON_CLUSTERED` 表示当前 Scheduler 实例运行在单机模式下,不参与集群调度。如果需要启用集群模式,需要满足以下条件:
- 使用支持持久化的 Job 存储(如 JDBC-JobStoreTX 或 JDBC-JobStoreCMT)。
- 所有集群节点共享同一个数据库。
- 配置文件中设置 `org.quartz.scheduler.instanceId=AUTO`。
##### (4)Misfire 处理规则
Misfire 是指当触发器错过预定执行时间时的行为。Quartz 提供了多种 Misfire 处理策略[^4],常见的包括:
- `MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY`:忽略 Misfire,按原计划继续执行。
- `MISFIRE_INSTRUCTION_FIRE_NOW`:立即执行。
- `MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT`:重新调度并保留原有重复次数。
配置示例如下:
```java
trigger.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
```
#### 3. Spring Boot 集成 Quartz 的注意事项
在 Spring Boot 中集成 Quartz 时,通常需要在主类上添加以下注解[^5]:
- `@SpringBootApplication`:启用 Spring Boot 应用。
- `@EnableScheduling`:启用 Spring 的任务调度功能。
- `@MapperScan`:扫描 MyBatis 映射器。
如果需要将 Job 存储从 RAMJobStore 切换到数据库存储,还需要配置 JDBC-JobStore[^5]。
#### 示例代码
以下是一个简单的 Quartz Job 定义示例[^2]:
```java
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloJob implements Job {
private static final Logger log = LoggerFactory.getLogger(HelloJob.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.info("Hello World! - " + new Date());
}
}
```
###
阅读全文
相关推荐


















