Web后端Javaee企业级开发之定时任务 Springboot整合任务框架Quartz和Task详解

简介: Web后端Javaee企业级开发之定时任务 Springboot整合任务框架Quartz和Task详解

定时任务

在Java EE企业级开发中,定时任务(也称为后台调度或周期性任务)是非常常见的一种功能,主要用于执行那些不需要用户交互,但需要按照预定时间间隔或事件触发的任务。Java EE提供了几个框架和API来处理这种需求:

  1. Java.util.Timer和TimerTask:这是最早的定时任务解决方案,它允许你在主线程之外执行任务。然而,这通常用于一次性任务,不是特别适合复杂的业务逻辑,因为线程安全性较差。
  2. ScheduledExecutorService:这个API在Java并发包中,提供了更高级别的定时任务支持。你可以创建一个ScheduledFuture对象,它可以延迟执行,定期执行或者在特定的延迟和期限后执行。这是一个线程安全且灵活的选择。
  3. Quartz Scheduler:这是一个强大的开源任务调度框架,为Java应用程序提供了一种可靠的定时任务执行机制。它支持复杂的调度规则,包括基于日期、时间间隔、cron表达式等,并且提供了易于使用的API和详细的日志记录。
  4. JSR 223 (Scripting for Java EE):允许你使用脚本语言(如JavaScript、Groovy或Python)编写定时任务,结合了Java的灵活性和这些语言的简洁性。
  5. Spring框架:Spring提供了内置的TaskExecutor和@Scheduled注解,让你可以在Spring容器中轻松地管理和调度任务,同时还提供了与其他库(如Quartz)集成的能力。

这里说的并不是要去干什么事情

而是定时去做一件工作

其实定时任务在我们的企业级开发 中非常常见

我们做一个定时任务就行哈

在指定时间前把报表计算出来

比如我们之前的缓存计算

每隔1分钟打印一下信息

还有我们的618 双11购物

只要设定在指定时间上架商品就行

示例操作

定时器方法

方法重载

可以设置是任务 还有运行时间

这里用的就是多线程

到达指定时间后执行语句

package com.bigdata1421.demo;
 
import java.util.Timer;
import java.util.TimerTask;
 
public class TimerTaskApp {
    public static void main(String[] args) {
        //创建一个定时器对象
        Timer timer=new Timer();
        //用定时器对象调用方法
        TimerTask task=new TimerTask() {
            @Override
            public void run() {
                System.out.println("执行");
            }
        };
        timer.schedule(task,0,2000);
    }
}

开始不停打印

但人们不满足于此

研发了各种框架

quartz

普及四个概念

导入对应的依赖

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

接下来

创建具体执行的工作

创建quartz包下的实现类

就代表创建一个具体任务

这里不是springboot容器

只是一个java对象

package com.bigdata1421.demo.quartz;
 
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
 
public class MyQuartz extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("quartz task run...");
    }
}

接下来创建配置类

书写绑定

一步一步往下绑定

package com.bigdata1421.demo.config;
 
import com.bigdata1421.demo.quartz.MyQuartz;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class QuartzConfig {
 
    @Bean
    public JobDetail printJobDetail(){
        //绑定具体的工作
        return JobBuilder.newJob(MyQuartz.class).storeDurably().build();
    }
 
    @Bean
    public Trigger printJobTrigger(){
        //绑定对应的工作明细
        //设置任务时间 秒 分 时 日 月 星期
        ScheduleBuilder scheduleBuilder=CronScheduleBuilder.cronSchedule("0/5 * * * * ? ");
        return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(scheduleBuilder).build();
    }
 
}

可以学习一下这个写写法

叫什么cron表达式

运行boot工程

我们发现 控制台开始打印

我们启动spring容器

发现控制台能一直打印

停止工程 会shutdown

小结

task

我们做完springboot整合Quartz后

我们发现台繁琐了

我们先写了具体要写的类

然后还得写一堆配置类

把他们绑到一块

我们有简化的办法

在启动类里用注解开启定时任务的功能

package com.bigdata1421.demo;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableScheduling;
 
@SpringBootApplication
//开启定时任务功能
@EnableScheduling
public class DemoApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
 
}

写一个类

这个类定义了定时任务

package com.bigdata1421.demo.quartz;
 
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
@Component
public class MyBean {
 
    @Scheduled(cron ="0/1 * * * * ?")
    public void print(){
        System.out.println("spring task run");
    }
 
}

这样就能一直执行

小结

目录
打赏
0
0
0
0
38
分享
相关文章
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
249 1
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
311 70
SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战
本文对比分析了SpringBoot中的`@Scheduled`与Quartz定时任务框架。`@Scheduled`轻量易用,适合单机简单场景,但存在多实例重复执行、无持久化等缺陷;Quartz功能强大,支持分布式调度、任务持久化、动态调整和失败重试,适用于复杂企业级需求。文章通过特性对比、代码示例及常见问题解答,帮助开发者理解两者差异,合理选择方案。记住口诀:单机简单用注解,多节点上Quartz;若是任务要可靠,持久化配置不能少。
244 4
后端技术:构建高效稳定的现代Web应用
【10月更文挑战第5天】后端技术:构建高效稳定的现代Web应用
242 1
Jeesite5:Star24k,Spring Boot 3.3+Vue3实战开源项目,架构深度拆解!让企业级项目开发效率提升300%的秘密武器
Jeesite5 是一个基于 Spring Boot 3.3 和 Vue3 的企业级快速开发平台,集成了众多优秀开源项目,如 MyBatis Plus、Bootstrap、JQuery 等。它提供了模块化设计、权限管理、多数据库支持、代码生成器和国际化等功能,极大地提高了企业级项目的开发效率。Jeesite5 广泛应用于企业管理系统、电商平台、客户关系管理和知识管理等领域。通过其强大的功能和灵活性,Jeesite5 成为了企业级开发的首选框架之一。访问 [Gitee 页面](https://gitee.com/thinkgem/jeesite5) 获取更多信息。
206 0
Jeesite5:Star24k,Spring Boot 3.3+Vue3实战开源项目,架构深度拆解!让企业级项目开发效率提升300%的秘密武器
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
121 5
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
240 2
实现跨域请求:Spring Boot后端的解决方案
本文介绍了在Spring Boot中处理跨域请求的三种方法:使用`@CrossOrigin`注解、全局配置以及自定义过滤器。每种方法都适用于不同的场景和需求,帮助开发者灵活地解决跨域问题,确保前后端交互顺畅与安全。
403 0
后端技术在现代Web开发中的实践与创新
【10月更文挑战第13天】 本文将深入探讨后端技术在现代Web开发中的重要性,通过实际案例分析展示如何利用先进的后端技术提升用户体验和系统性能。我们将从基础架构设计、数据库优化、安全性保障等方面展开讨论,为读者提供清晰的指导和实用的技巧。无论是新手开发者还是经验丰富的技术人员,都能从中获得启发和帮助。
178 2
后端技术在现代Web开发中的实践与创新
本文探讨了后端技术在现代Web开发中的重要性及其应用。通过分析当前流行的后端框架和开发模式,揭示了如何利用这些技术来构建高效、可扩展的Web应用程序。同时,文章也讨论了未来后端技术的发展趋势,为开发者提供了一些启示。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问