Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java quartz 动态刷新cron


在 Java 中使用 Quartz 动态刷新 Cron 表达式有多种实现方式。以下是其中几种常见的方式,每种方式都会提供详细的步骤流程和示例代码。

方式一:通过修改 JobDetail 的 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);

方式二:使用 CronTriggerFactoryBean(Spring 集成)

添加 Maven 依赖(Spring 和 Quartz):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
  1. 创建一个 Job 类(同方式一)。
  2. 创建 Spring 配置类:
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 的情况。在实际使用中,你可以根据项目需要选择合适的方式。请注意,示例中的部分类名、方法名可能需要根据实际情况进行适当的调整。

在Java中使用Quartz实现动态添加和删除任务,你可以采用以下几种方式:使用`JobDetail`和`Trigger`、使用`CronT ...
在Java的Swing编程中,如果你想要刷新`JPanel`上的内容,有几种不同的实现方式。示例代码:###方法二:使用revalidate ...
Elasticsearch 刚索引的文档并不是立即对搜索可见,它们会先在内存 buffer(缓存区)中,待 buffer 数据满后或主动刷新 ...
在Java中刷新JWT(JSONWebToken)令牌,可以使用不同的实现方式。令牌刷新请求:在令牌即将过期时,客户端发送一个令牌刷新请求, ...
动态生成DjangoForm的实现方式使用动态表单类使用动态表单类是一种常见的方式,它允许在运行时动态地生成表单类,根据需要添加字段和验证规 ...