首页 > 其他分享 >Web项目中使用Spring 3.x + Quartz 2.x实现作业调度详解

Web项目中使用Spring 3.x + Quartz 2.x实现作业调度详解

时间:2023-06-20 13:02:06浏览次数:44  
标签:Web Quartz 15 触发 Spring 日期 字段 周内 10


Quartz是一个基于Java的作业调度管理的轻量级框架,目前在很多企业应用中被使用,它的作用类似于java.util中的Timer和TimeTask、数据库中的job等,但Quartz的功能更强大、更灵活。从Quartz2开始,你可以使用POJO作为一个任务(Job),这种开发方式进一步降低了代码的耦合度,如果跟Spring进行整合,使用起来将更加方便简单。

整合开发需要使用的jar如下所示:

Web项目中使用Spring 3.x + Quartz 2.x实现作业调度详解_Spring

接下来写一个被调度的任务:

Web项目中使用Spring 3.x + Quartz 2.x实现作业调度详解_字段_02

然后可以在web.xml配置Spring的ContextLoaderListener监听器,用它来启动Spring的IoC容器:

Web项目中使用Spring 3.x + Quartz 2.x实现作业调度详解_spring_03

最后是Spring的配置文件applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
			http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<!-- 配置调度器工厂(SchedulerFactoryBean) -->
	<bean name="startQuertz"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="myJobTrigger" />
			</list>
		</property>
	</bean>

	<!-- 配置Cron触发器(CronTriggerFactoryBean) -->
	<bean id="myJobTrigger"
		class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail">
			<ref bean="myJobDetail" />
		</property>
		<property name="cronExpression">
			<!-- 每隔一秒钟执行一次 -->
			<value>0/1 * * * * ?</value>
		</property>
	</bean>

	<!-- 配置方法调用任务工厂(XXXJobDetailFactoryBean) -->
	<bean id="myJobDetail"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject">
			<ref bean="myJob" />
		</property>
		<property name="targetMethod">
			<value>doWork</value>
		</property>
	</bean>

	<!-- 配置自定义的时间任务(Job) -->
	<bean id="myJob" class="com.accp.job.MyJob" />

</beans>



到此为止,一个最简单的Spring 3+ Quartz 2就做好了,启动你的服务器看看控制台,时间任务就开始执行了!

关于CronTriggerFactoryBean中Cron表达式(cronExpression)的配置,请看下面的说明。

Cron 触发器利用一系列特殊字符,如下所示:

  • 反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。
  • 问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。
  • 在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。
  • 井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。
  • 星号(*)字符是通配字符,表示该字段可以接受任何可能的值。



字段  允许值                   允许的特殊字符 

秒     0-59                        - * / 

分     0-59                        - * / 

小时  0-23                        - * / 

日期  1-31                        - * ? / L W C 

月份  1-12或者 JAN-DEC     - * / 

星期  1-7或者 SUN-SAT       - * ? / L C # 

年(o) 留空, 1970-2099       - * /

表达式意义 
"0 0 12 * * ?" 每天中午12点触发 
"0 15 10 ? * *" 每天上午10:15触发 
"0 15 10 * * ?" 每天上午10:15触发 
"0 15 10 * * ? *" 每天上午10:15触发 
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发 
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 
"0 15 10 15 * ?" 每月15日上午10:15触发 
"0 15 10 L * ?" 每月最后一日的上午10:15触发 
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发

如果你配置过Linux系统上的CRON进程,相信不会对这种表达式感到陌生。


标签:Web,Quartz,15,触发,Spring,日期,字段,周内,10
From: https://blog.51cto.com/u_16166070/6521816

相关文章

  • 基于spring cloud技术栈构建的一款源码级jvs低代码平台,值得收藏
    开发团队在日常的项目开发过程中,会遇到各种各样单点需求。确保应用程序能够满足特定的业务需求并与现有系统和服务进行有效集成,那么是团队选择对应技术栈或者整体开发工具的核心考量:核心关注的点:1、技术栈的选择,一定要通用,人才选择面比较广2、能力的扩展性,能否自己添加各种能力,最......
  • Web自动化测试中的最佳实践和常见陷阱
    在现代软件开发中,Web自动化测试已经成为保证软件质量和提高开发效率的重要手段之一。然而,仅凭自动化测试工具和技术并不足以确保成功。下面我们将介绍一些Web自动化测试的最佳实践和常见陷阱,帮助您避免一些常见的错误和困难。首先,让我们来看一些Web自动化测试的最佳实践。首要问题......
  • uniapp企业微信web-view父子通信问题
    项目背景:开发工具为HBuilderX,框架为uniapp,开发移动端的Web应用,在企业微信中使用(自建应用),Web开发的应用,不是小程序。需求:页面中用到<web-view>组件,加载其他系统的页面(有跨域),需要在父子页面之间相互通信。这里通信的东西其实就是获取定位,通过uniapp获取用户定位信息,传递给<web-view......
  • 也说一说IDEA热部署Web项目最终解决方案,确实大大提高工作效率
    热部署就是正在运行状态的应用,修改了它的源码之后,在不重新启动的情况下能够自动把增量内容编译并部署到服务器上,使得修改立即生效。热部署为了解决的问题有两个:1、在开发的时候,修改代码后不需要重启应用就能看到效果,大大提升开发效率;2、生产上运行的程序,可以在不停止运行的情况......
  • php webhook excute that can pull code
      <?phpexec('whoami2>&1',$res);var_dump($res);exec('cd'.dirname(__FILE__).'/../&&sudogitpulloriginmaster2>&1',$res,$rc);var_dump($rc);if($rc==0){echo'部署成功<br&g......
  • 第二届猿人学web比赛第一题浅记
    上个月的猿人学逆向比赛终于参加了一次,本着嫖一件文化衫的目的与做出第一题的目标,开始了比赛。过程是艰苦的,结果还是满意的,文化衫嫖到了,现在记录一下第一题的过程。(基于补环境)链接地址:https://match2023.yuanrenxue.cn/topic/11、网站分析:照常F12看发包的请求:对比多个请求......
  • 【web开发】PHP命名空间中的子空间和公共空间详解及相关术语解读
    前言PHP的命名空间和文件系统的结构很像,文件夹可以有子文件夹,命名空间中也可以定义子空间来描述各个空间之间的所属关系。比如:cart购物车和order订单这两个模块都处于同一个shop商城项目内,通过命名空间子空间表达关系的:<?phpnamespaceshop\cart;classDemo{ //类的成员}name......
  • BUUCTF:[安洵杯 2019]easy_web
    https://buuoj.cn/challenges#[%E5%AE%89%E6%B4%B5%E6%9D%AF%202019]easy_webTXpVek5UTTFNbVUzTURabE5qYz0经过base64decode->base64decode->hexdecode得到555.png解码编码脚本或者自己利用在线工具编码也行frombinasciiimport*frombase64import*defdecode(param):r......
  • BUUCTF:[CISCN2019 华东南赛区]Web11
    注意到了banner中信息说是smarty,并且将XFF输出到页面直接尝试Smarty模板注入{$smarty.version}Smarty3官方手册:https://www.smarty.net/docs/zh_CN/language.function.if.tpl{ifsystem('ls-lha/')}{/if}{ifsystem('cat/flag')}{/if}......
  • 什么是 SAP Commerce Cloud SmartEdit 的 webApplicationInjector.js
    SAPCommerceCloudSmartEdit是SAP提供的一种基于云的电子商务平台,旨在帮助企业轻松管理和优化他们的在线商店。SmartEdit是SAPCommerceCloud的一个功能强大的组件,用于简化网站内容的编辑和管理。通过SmartEdit,商家可以在一个易于使用的界面中轻松地修改和更新网站布局......