java定时任务之quartz

java定时任务之quartz一、Quartz介绍  在企业应用中,我们经常会碰到时间任务调度的需求,比如每天凌晨生成前天报表,每小时生成一次汇总数据等等。Quartz是出了名的任务调度框架,它可以与J2SE和J2EE应用程序相结合,功能灰常强大,轻轻松松就能与Spring集成,使用方便。二、Quartz中的概念  主要有三个核心概念:调度器、任务和触发器。三者关系简单来说就是,调度器负责调度各个任务,到了某个时刻…

大家好,又见面了,我是你们的朋友全栈君。

一、Quartz介绍

 

  在企业应用中,我们经常会碰到时间任务调度的需求,比如每天凌晨生成前天报表,每小时生成一次汇总数据等等。Quartz是出了名的任务调度框架,它可以与J2SE和J2EE应用程序相结合,功能灰常强大,轻轻松松就能与Spring集成,使用方便。

二、Quartz中的概念

  主要有三个核心概念:调度器、任务和触发器。三者关系简单来说就是,调度器负责调度各个任务,到了某个时刻或者过了一定时间,触发器触动了,特定任务便启动执行。概念相对应的类和接口有:

  1)JobDetail:望文生义就是描述任务的相关情况;

  2)Trigger:描述出发Job执行的时间触发规则。有SimpleTrigger和CronTrigger两个子类代表两种方式,一种是每隔多少分钟小时执行,则用SimpleTrigger;另一种是日历相关的重复时间间隔,如每天凌晨,每周星期一运行的话,通过Cron表达式便可定义出复杂的调度方案。

  3)Scheduler:代表一个Quartz的独立运行容器,Trigger和JobDetail要注册到Scheduler中才会生效,也就是让调度器知道有哪些触发器和任务,才能进行按规则进行调度任务。

三、Spring中使用Quartz

1,所需jar包:quartz.jar,spring.jar,commons-collections-3.2.jar;

  2,添加业务逻辑类(简单示例):

public class UserHeartBeat {

public void Show(){

Calendar cal=Calendar.getInstance();

long date=cal.getTime().getTime();

SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss:SSS”);

String result=sdf.format(date);

System.out.println(result);

System.out.println(“Spring Quartz Test”);

}

public static void main(String args[]){

new UserHeartBeat().Show();

}

}

这个类的作用就是用来定义每隔多久要做的事情

   3配置文件(applicationContext.xml) 用来配置定时任务 

    <?xml version=”1.0″ encoding=”UTF-8″?>

<!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd”>

<beans>

<!– 要调用的工作类 –>

<bean id=”MyJob” class=”com.abin.spring.quartz.UserHeartBeat”></bean>

<!– 定义调用对象和调用对象的方法 –> 

<bean id=”JobWork” class=”org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean”>

<!– 调用的类 –>

<property name=”targetObject”>

<ref bean=”MyJob”/>

</property>

<!– 调用类中的方法 –>

<property name=”targetMethod”>

<value>Show</value>

</property>

</bean>

<!– 定义触发时间 –>

<bean id=”JobTrigger” class=”org.springframework.scheduling.quartz.CronTriggerBean”>

<property name=”jobDetail”>

<ref bean=”JobWork”/>

</property>

<!– cron表达式 –>

<property name=”cronExpression”>

<value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>

</property>

</bean>

<bean id=”JobSchedule” lazy-init=”false” autowire=”no” class=”org.springframework.scheduling.quartz.SchedulerFactoryBean”>

<property name=”triggers”>

<list>

<ref bean=”JobTrigger”/>

</list>

</property>

</bean>

</beans>

其中间隔时间的配置说明见  定时任务配置的间间隔配置说明

  4.在主配置文件web.xml中注册定时任务的配置文件(applicationContext.xml)

  <servlet>

    <servlet-name>spring</servlet-name>

    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>

    <load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

    <servlet-name>spring</servlet-name>

    <url-pattern>*.do</url-pattern>

</servlet-mapping>

<context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>/WEB-INF/classes/ApplicationContext.xml</param-value>

</context-param>

     5.定义一个测试类来调用定时任务

public static void main(String[] args) {

System.out.println(“Spring Quartz test start…”);

ApplicationContext context=new ClassPathXmlApplicationContext(“ApplicationContext.xml”);

// 如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化

System.out.println(“Spring Quartz test end…”);

}

运行效果图如下:

java定时任务之quartz

案例下载地址  实用的spring+quartz实现定时任务-源码世界

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158518.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月13日 下午12:16
下一篇 2022年7月13日 下午12:16


相关推荐

  • ubuntu修改root密码,$ sudo passwd root

    ubuntu修改root密码,$ sudo passwd rootlyzh ubuntu passwdrootpa Youmaynotvie lyzh ubuntu sudopasswdro RetypenewUNI passwd passwordupda

    2026年3月19日
    2
  • 留言板个人代码展示墙

    留言板个人代码展示墙每逢期末 各科专业课的课程设计相信会让许多和我一样的大学生磨破脑袋 本着与人为善 授人予鱼的思想 我决定 好吧 你懂的 废话不多说 上菜 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 留言板功能模块 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 一 注册模块 nbsp 二 登陆模块三 留言板界面四 留言模块五 对个人留言的

    2026年3月26日
    1
  • SpringBoot启动全流程源码解析(超详细版)[通俗易懂]

    SpringBoot启动全流程源码解析(超详细版)[通俗易懂]我们在使用SpringBoot启动项目的时候,可能只需加一个注解,然后启动main,整个项目就运行了起来,但事实真的是所见即所得吗,还是SpringBoot在背后默默做了很多?本文会通过源码解析的方式深入理解SpringBoot启动全过程SpringBoot启动过程流程图源码解析大家不要抗拒源码解析,这个非常优秀的代码,我们如果能够学会对自己代码编写水平大有裨益首先,我们先来看下SpringBoot项目的启动类@SpringBootApplicationpublicclassSp.

    2025年10月27日
    6
  • springBoot 入门(二)—— 使用 spring.profiles.active来区分配置

    springBoot 入门(二)—— 使用 spring.profiles.active来区分配置背景很多时候 我们项目在开发环境和生成环境的环境配置是不一样的 例如 数据库配置 在开发的时候 我们一般用测试数据库 而在生产环境的时候 我们是用正式的数据 这时候 我们可以利用 profile 在不同的环境下配置用不同的配置文件或者不同的配置 springboot 提供 springboot 允许你通过命名约定按照一定的格式 application profile propert

    2026年3月26日
    2
  • oracle sql 去重_oracle高效去重

    oracle sql 去重_oracle高效去重在数据库的实际操作中,经常会遇到这样的情况:不同id所对应的信息是相同的,即行数据相同。下面我将分别针对三种常用的数据库找出重复的记录,并将其进行删除。一:SQLserver数据库delete[db_BaiDuDB].[dbo].[tb_WEB_Hotel]whereidin(selectidfrom(selectunitName,unitAddress…

    2022年9月30日
    6
  • 【从零开始】OpenClaw基础入门:从“养虾”概念到第一个智能体程序

    【从零开始】OpenClaw基础入门:从“养虾”概念到第一个智能体程序

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号