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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 8种HOOK技术[通俗易懂]

    8种HOOK技术[通俗易懂]1.IAT_HOOKIAT是程序中存储导入函数地址的数据结构,如果HOOK了导入函数地址。就可以在函数调用的时候,将函数流程HOOK到我们指定的流程。但是我个人觉得这种方式最好要结合DLL注入的方式,如果单纯的使用HOOK,那么就需要将需要执行的操作的shellcode写入目标进程,如果操作复杂,可能需要的shellcode量特别大,所以我们需要借助DLL注入,这样就将我们需要执行的代码写入…

    2022年5月26日
    34
  • n皇后问题总结_模拟退火n皇后

    n皇后问题总结_模拟退火n皇后N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)。一、 求解N皇后问题是算法中回溯法应用的一个经典案例      回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。     在现实中,有很多问题往往需要我们把其所有

    2022年9月30日
    2
  • web安全(入门篇)

    web安全的概念太过于宽泛,博主自知了解的并不多,还需要继续学习。但是又想给今天的学习进行总结,所以今天特分享一篇关于web安全的文章,希望对初次遇到web安全问题的同学提供帮助。SQL注入数据库表出现场景当开发登录模块的时候,如果我们使用是mysql操作php,并非使用mysqli、PDO等;当查询用户是否存在的SQL是这样写的,select*fromuserwherename=

    2022年4月5日
    40
  • 雷电模拟器opengl版本过低_tx模拟器安卓

    雷电模拟器opengl版本过低_tx模拟器安卓上图说明你的显卡暂不支持模拟器,遇到这个问题,主要是3种原因:1、你的电脑没有显卡解决方案:这个问题若不换电脑硬件是暂时无解的,只能等待我们模拟器支持集成显卡了2、你的电脑显卡确实不支持OpenGL2.0解决方案:这个问题只能通过更换显卡来解决了上图说明你的显卡暂不支持模拟器,遇到这个问题,主要是3种原因:1、你的电脑没有显卡解决方案:这个问题若不换电脑硬件是暂时无解的,只能等待我们模拟器…

    2022年10月8日
    2
  • Echarts整合(前后端、数据库)

    Echarts整合(前后端、数据库)

    2021年11月12日
    42
  • matlab灰度gui,matlabgui灰度变化

    matlab灰度gui,matlabgui灰度变化课程设计报告册?课程名称:课题名称:专业班级:姓名:MATLAB课程设计灰度变换增强BobWang学号:信息楼22015164课程设计主要场所:时间:……《数字视音频技术》课程设计报告题目:基于MATLABGUI的数字图像处…学号:20994055003数字图像处理论文二〇一二年十月基于灰度变换的图像增强及Matlab实现摘…

    2022年5月23日
    34

发表回复

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

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