在 Java 中使用 Quartz 动态刷新 Cron 表达式有多种实现方式。以下是其中几种常见的方式,每种方式都会提供详细的步骤流程和示例代码。
添加 Maven 依赖(Quartz):
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.2</version>
</dependency>
创建一个 Job 类:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class MyJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // 你的任务逻辑
        System.out.println("Job is running...");
    }
}
创建 Quartz Scheduler 和 JobDetail:
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
public class DynamicCronExample {
    public static void main(String[] args) throws SchedulerException {
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.start();
        JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                .withIdentity("myJob", "group1")
                .build();
        // 初始化 CronTrigger,Cron 表达式暂时使用一个初始值
        CronTrigger cronTrigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "group1")
                .withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?")) // 初始 Cron 表达式
                .build();
        scheduler.scheduleJob(jobDetail, cronTrigger);
    }
}
动态刷新 Cron 表达式:
// 获取现有的 CronTrigger
TriggerKey triggerKey = new TriggerKey("myTrigger", "group1");
CronTrigger oldTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);
// 创建新的 CronTrigger
CronTrigger newTrigger = TriggerBuilder.newTrigger()
        .withIdentity("myTrigger", "group1")
        .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) // 新的 Cron 表达式
        .build();
// 更新任务的 CronTrigger
scheduler.rescheduleJob(triggerKey, newTrigger);
添加 Maven 依赖(Spring 和 Quartz):
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
@Configuration
public class QuartzConfig {
    @Bean
    public JobDetailFactoryBean jobDetail() {
        return new JobDetailFactoryBeanBuilder()
            .jobClass(MyJob.class)
            .build();
    }
    @Bean
    public CronTriggerFactoryBean cronTrigger() {
        return new CronTriggerFactoryBeanBuilder()
            .jobDetail(jobDetail().getObject())
            .cronExpression("0/10 * * * * ?") // 初始 Cron 表达式
            .build();
    }
}
动态刷新 Cron 表达式:
@Autowired
private CronTriggerFactoryBean cronTrigger;
// 更新 Cron 表达式
cronTrigger.setCronExpression("0/5 * * * * ?");
cronTrigger.afterPropertiesSet(); // 刷新 Cron 表达式
这两种方式都可以实现动态刷新 Quartz Job 的 Cron 表达式。方式一适用于纯 Quartz 使用场景,而方式二适用于 Spring 集成 Quartz 的情况。在实际使用中,你可以根据项目需要选择合适的方式。请注意,示例中的部分类名、方法名可能需要根据实际情况进行适当的调整。