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");
    }
 
}

这样就能一直执行

小结

目录
相关文章
|
10天前
|
SQL 缓存 搜索推荐
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,涵盖从基础架构到性能优化的多个方面。通过分析当前主流后端技术的优缺点,并提供一些实用的解决方案和建议,帮助开发者更好地应对日常开发中的挑战。
29 1
|
4天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的医院门诊预约挂号系统
基于Java+Springboot+Vue开发的医院门诊预约挂号系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的门诊预约挂号管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
28 2
基于Java+Springboot+Vue开发的医院门诊预约挂号系统
|
1天前
|
SQL JSON Java
springboot 如何编写增删改查后端接口,小白极速入门,附完整代码
本文为Spring Boot增删改查接口的小白入门教程,介绍了项目的构建、配置YML文件、代码编写(包括实体类、Mapper接口、Mapper.xml、Service和Controller)以及使用Postman进行接口测试的方法。同时提供了SQL代码和完整代码的下载链接。
springboot 如何编写增删改查后端接口,小白极速入门,附完整代码
|
9天前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
|
15天前
|
安全 JavaScript Java
后端技术在现代Web开发中的实践与挑战
本文旨在探讨后端技术在现代Web开发中的关键作用,分析其在数据处理、业务逻辑实现和系统安全等方面的重要性。通过阐述常见的后端技术和框架,如Node.js、Django和Spring Boot,展示它们在实际项目中的应用。同时,文章将讨论后端开发所面临的主要挑战,包括性能优化、扩展性和维护性问题,以及如何应对这些挑战。最终,通过对实际案例的分析,总结出一套行之有效的后端开发最佳实践,为开发者提供参考。
47 5
|
15天前
|
人工智能 关系型数据库 数据安全/隐私保护
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,通过分析其在数据处理、业务逻辑实现和安全性保障方面的应用,揭示后端技术的核心价值。同时,本文还将讨论当前后端开发面临的主要挑战,如高并发处理、数据安全、微服务架构的复杂性等,并给出相应的解决方案。无论是后端开发者还是对后端技术感兴趣的读者,都可以通过这篇文章获得启发和指导。
消息中间件 缓存 监控
75 0
|
22天前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
54 2
|
24天前
|
NoSQL 前端开发 Java
使用 Spring Boot + Neo4j 实现知识图谱功能开发
在数据驱动的时代,知识图谱作为一种强大的信息组织方式,正逐渐在各个领域展现出其独特的价值。本文将围绕使用Spring Boot结合Neo4j图数据库来实现知识图谱功能开发的技术细节进行分享,帮助读者理解并掌握这一技术栈在实际项目中的应用。
93 4
|
26天前
|
IDE Java 开发工具
还在为繁琐的配置头疼吗?一文教你如何用 Spring Boot 快速启动,让开发效率飙升,从此告别加班——打造你的首个轻量级应用!
【9月更文挑战第2天】Spring Boot 是一款基于 Spring 框架的简化开发工具包,采用“约定优于配置”的原则,帮助开发者快速创建独立的生产级应用程序。本文将指导您完成首个 Spring Boot 项目的搭建过程,包括环境配置、项目初始化、添加依赖、编写控制器及运行应用。首先需确保 JDK 版本不低于 8,并安装支持 Spring Boot 的现代 IDE,如 IntelliJ IDEA 或 Eclipse。
81 5