首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用Spring Scheduler实现Quartz for Cron调度

Spring Scheduler是Spring框架提供的一种任务调度工具,可以用来实现定时任务的调度。它基于Quartz框架,提供了更简单、更易用的方式来配置和管理定时任务。

Quartz是一个功能强大的开源任务调度框架,可以用于在Java应用程序中实现各种类型的定时任务。它支持基于时间表达式的任务调度,可以按照固定的时间间隔或者特定的时间点来执行任务。

使用Spring Scheduler实现Quartz for Cron调度的步骤如下:

  1. 添加依赖:在项目的pom.xml文件中添加Spring Scheduler和Quartz的依赖。
代码语言:txt
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
  1. 创建定时任务类:创建一个继承自QuartzJobBean的定时任务类,实现executeInternal方法,在该方法中编写具体的任务逻辑。
代码语言:txt
复制
public class MyJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        // 任务逻辑代码
    }
}
  1. 配置定时任务:在Spring的配置文件中配置定时任务的调度器和触发器。
代码语言:txt
复制
<bean name="myJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <property name="jobClass" value="com.example.MyJob" />
</bean>

<bean name="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="myJobDetail" />
    <property name="cronExpression" value="0 0/5 * * * ?" />
</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="myTrigger" />
        </list>
    </property>
</bean>

在上述配置中,myJobDetail定义了定时任务的具体实现类,myTrigger定义了任务的调度规则,cronExpression指定了任务的执行时间表达式,这里表示每隔5分钟执行一次。

  1. 启动定时任务:在Spring Boot的启动类上添加@EnableScheduling注解,启用定时任务的调度功能。
代码语言:txt
复制
@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

至此,使用Spring Scheduler实现Quartz for Cron调度的配置就完成了。当应用启动后,定时任务将按照配置的时间表达式执行。

Spring Scheduler的优势在于它与Spring框架的无缝集成,可以方便地与其他Spring组件进行整合。同时,它提供了简单易用的配置方式,使得任务调度的管理变得更加简单和灵活。

应用场景包括但不限于:

  1. 定时数据备份:可以定时备份数据库或者文件系统中的数据,保证数据的安全性和可靠性。
  2. 定时报表生成:可以定时生成各种报表,如销售报表、财务报表等,提供给相关人员查看和分析。
  3. 定时数据同步:可以定时将数据从一个系统同步到另一个系统,保持数据的一致性。
  4. 定时任务调度:可以定时执行一些系统维护任务,如清理日志、更新缓存等。

腾讯云提供了一系列与云计算相关的产品,其中包括云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接如下:

  1. 云服务器(CVM):提供弹性计算能力,支持按需购买和预付费两种计费方式。产品介绍链接
  2. 云数据库MySQL版(CDB):提供高可用、可扩展的MySQL数据库服务。产品介绍链接
  3. 云对象存储(COS):提供安全、稳定、低成本的对象存储服务。产品介绍链接

以上是关于用Spring Scheduler实现Quartz for Cron调度的完善且全面的答案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 基于Quartz编写一个可复用的分布式调度任务管理WebUI组件

    创业小团队,无论选择任何方案,都优先考虑节省成本。关于分布式定时调度框架,成熟的候选方案有XXL-JOB、Easy Scheduler、Light Task Scheduler和Elastic Job等等,其实这些之前都在生产环境使用过。但是想要搭建高可用的分布式调度平台,这些框架(无论是否去中心化)都需要额外的服务器资源去部署中心调度管理服务实例,甚至有时候还会依赖一些中间件如Zookeeper。回想之前花过一段时间看Quartz的源码去分析它的线程模型,想到了它可以基于MySQL,通过一个不是很推荐的X锁方案(SELECT FOR UPDATE加锁)实现服务集群中单个触发器只有一个节点(加锁成功的那个节点)能够执行,这样子,就能够仅仅依赖于现有的MySQL实例资源实现分布式调度任务管理。一般来说,有关系型数据保存需求的业务应用都会有自己的MySQL实例,这样子就能几乎零成本引入一个分布式调度管理模块。某个加班的周六下午敲定了初步方案之后,花了几个小时把这个轮子造出来了,效果如下:

    03

    SpringBoot之定时任务quartz

    前言:对于Quartz(kwɔrts)之前在公司用过,比较尴尬的是真的只是用过,写个控制器在任务系统里配置一下cron表达式就完事 https://github.com/songwie/task。从那天起我就对Quartz失去了兴趣,后来在使用SpringBoot的时候了解到Scheduled(Spring 3.1之后支持),就用Scheduled搭建了一个简单的任务系统。当时我就在想怎么弄个到点就能执行的任务,因为用Scheduled注解有很大的局限性,查阅了好多文档(我好后悔我当初没有学好英语,造成现在一直很反感英文文档,每次都是搜索中文博客(开源中国,推酷,简书segmentfault,scdn,.....),如果我英语给力,技术也不会这么差)还是没有发现比较好的解决方案,当时正好做众筹票务APP,比如用户下单之后30分钟没有支付需要将该订单的库存回收并改变订单状态为失效。如果轮询1秒一次的话,这样会频繁查询订单表,将所有失效时间小于当前时间的并且未支付的所有订单设置为失效,这样即不能做到及时,量比较多的话还会频繁锁表,订单表对于票务网站本身就很高频的,不管是下订单,支付过程的状态变更,还是查询订单状态。我当时采用了很low的方式,就是查询订单的时候,如果失效时间小于或者等于当前时间就update该ID的状态。对于用户来说没有什么变化,如果10条订单中只有一个就只会更新一个。问题来了,如果该用户没有查询订单是不是状态还是未支付的状态呢?所以我写了一个1分钟一次的轮询来解决状态问题。今天我不是来BB这种方案,其实Quartz除了CronTrigger还有SimpleTrigger。

    02

    Spring Boot 配置 Quartz 定时任务

    Job:是一个接口,只定义一个方法 execute(JobExecutionContext context),在实现接口的 execute 方法中编写所需要定时执行的 Job(任务)  Double slongitude = Double.valueOf(jobExecutionContext.getJobDetail().getJobDataMap().get("slongitude").toString()); JobDetail:Quartz 每次调度 Job 时,都重新创建一个 Job 实例,因此它不接受一个 Job 的实例,相反它接收一个 Job 实现类(JobDetail,描述 Job 的实现类及其他相关的静态信息,如 Job 名字、描述、关联监听器等信息),以便运行时通过 newInstance() 的反射机制实例化 Job。 rigger:是一个类,描述触发 Job 执行的时间触发规则,主要有 SimpleTrigger 和 CronTrigger 这两个子类。当且仅当需调度一次或者以固定时间间隔周期执行调度,SimpleTrigger 是最适合的选择;而 CronTrigger 则可以通过 Cron 表达式定义出各种复杂时间规则的调度方案:如工作日周一到周五的 15:00 ~ 16:00 执行调度等。 Scheduler:调度器就相当于一个容器,装载着任务和触发器,该类是一个接口,代表一个 Quartz 的独立运行容器,Trigger 和 JobDetail 可以注册到 Scheduler 中,两者在 Scheduler 中拥有各自的组及名称,组及名称是 Scheduler 查找定位容器中某一对象的依据,Trigger 的组及名称必须唯一,JobDetail 的组和名称也必须唯一(但可以和 Trigger 的组和名称相同,因为它们是不同类型的)。Scheduler 定义了多个接口方法,允许外部通过组及名称访问和控制容器中 Trigger 和 JobDetail。

    02
    领券