quartz插件详细设置怎么设置

ajiao2013 的BLOG
用户名:ajiao2013
文章数:250
访问量:12025
注册日期:
阅读量:5863
阅读量:12276
阅读量:373186
阅读量:1067032
51CTO推荐博文
&1、Scheduler的配置
&class=&org.springframework.scheduling.quartz.SchedulerFactoryBean&&&
&&&&&&&&name=&triggers&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&&&bean=&testTrigger&&&
&&&&&&&&&&&&&
&&&&&&&&name=&autoStartup&&value=&true&&&
&class=&org.springframework.scheduling.quartz.SchedulerFactoryBean&&&
&&&&&&&&name=&triggers&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&&&bean=&testTrigger&&&
&&&&&&&&&&&&&
&&&&&&&&name=&autoStartup&&value=&true&&&
&bean class=&org.springframework.scheduling.quartz.SchedulerFactoryBean&&
&property name=&triggers&&
&ref bean=&testTrigger&/&
&/property&
&property name=&autoStartup& value=&true&/&
&&& 说明:Scheduler包含一个Trigger列表,每个Trigger表示一个作业。
2、Trigger的配置
&id=&testTrigger&&class=&org.springframework.scheduling.quartz.CronTriggerBean&&&
&&&&&&&&name=&jobDetail&&ref=&testJobDetail&&&
&&&&&&&&name=&cronExpression&&value=&*/1&*&*&*&*&?&&&
&id=&testTrigger&&class=&org.springframework.scheduling.quartz.CronTriggerBean&&&
&&&&&&&&name=&jobDetail&&ref=&testJobDetail&&&
&&&&&&&&name=&cronExpression&&value=&*/1&*&*&*&*&?&&&
&bean id=&testTrigger& class=&org.springframework.scheduling.quartz.CronTriggerBean&&
&property name=&jobDetail& ref=&testJobDetail&/&
&property name=&cronExpression& value=&*/1 * * * * ?&/&&!-- 每隔1秒钟触发一次 --&
&&& 说明:
&&&&&&&& 1)Cron表达式的格式:秒 分 时 日 月 周 年(可选)。
&&&&&&&&&&&&&& 字段名&&&&&&&&&&&&&&&&
允许的值&&&&&&&&&&&&&&&&&&&&&&& 允许的特殊字符&&
&&&&&&&&&&&&&& 秒&&&&&&&&&&&&&&&&&&&&&
&& 0-59&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& , - * /&&
&&&&&&&&&&&&&&
分&&&&&&&&&&&&&&&&&&&&&&&& 0-59&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& , - *
&&&&&&&&&&&&&& 小时&&&&&&&&&&&&&&&&&& & 0-23&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&& 日&&&&&&&&&&&&&&&&&&&&& &&
1-31&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& , - * ? / L W C&&
&&&&&&&&&&&&&&
月&&&&&&&&&&&&&&&&&&&&&&&& 1-12 or JAN-DEC&&&&&&&&&, - * /&&
&&&&&&&&&&&&&&
周几&&&&&&&&&&&&&&&&&&&& 1-7 or SUN-SAT&&&&&&&&&&&, - * ? / L C
&&&&&&&&&&&&&& 年 (可选字段)&&&& empty, &&&&& , - * /
&&&&&&&&&&&&&& &?&字符:表示不确定的值
&&&&&&&&&&&&&& &,&字符:指定数个值
&&&&&&&&&&&&&& &-&字符:指定一个值的范围
&&&&&&&&&&&&&& &/&字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m
&&&&&&&&&&&&&& &L&字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X
&&&&&&&&&&&&&& &W&字符:指定离给定日期最近的工作日(周一到周五)
&&&&&&&&&&&&&& &#&字符:表示该月第几个周X。6#3表示该月第3个周五
&&&&&&&& 2)Cron表达式范例:
&&&&&&&&&&&&&&&& 每隔5秒执行一次:*/5 * * * * ?
&&&&&&&&&&&&&&&& 每隔1分钟执行一次:0 */1 * * * ?
&&&&&&&&&&&&&&&& 每天23点执行一次:0 0 23 * * ?
&&&&&&&&&&&&&&&& 每天凌晨1点执行一次:0 0 1 * * ?
&&&&&&&&&&&&&&&& 每月1号凌晨1点执行一次:0 0 1 1 * ?
&&&&&&&&&&&&&&&& 每月最后一天23点执行一次:0 0 23 L * ?
&&&&&&&&&&&&&&&& 每周星期天凌晨1点实行一次:0 0 1 ? * L
&&&&&&&&&&&&&&&& 在26分、29分、33分执行一次:0 26,29,33 * * * ?
&&&&&&&&&&&&&&&& 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * *
3、JobDetail的配置
Java代码 &
&bean&id=&testJobDetail&&class=&org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean&&
&&&&&&&&property&name=&targetObject&&ref=&testJob&/&
&&&&&&&&property&name=&targetMethod&&value=&execute&/&
&&&&&&&&property&name=&concurrent&&value=&false&/&&!--&是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程&--&
Java代码 &
&bean&id=&testJobDetail&&class=&org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean&&
&&&&&&&&property&name=&targetObject&&ref=&testJob&/& &&
&&&&&&&&property&name=&targetMethod&&value=&execute&/& &&
&&&&&&&&property&name=&concurrent&&value=&false&/&&!--&是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程&--&
&bean id=&testJobDetail& class=&org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean&&
&property name=&targetObject& ref=&testJob&/&
&property name=&targetMethod& value=&execute&/&
&property name=&concurrent& value=&false&/&&!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 --&
4、业务类的配置
&id=&testJob&&class=&com.cjm.web.service.quartz.TestJob&&&
&id=&testJob&&class=&com.cjm.web.service.quartz.TestJob&&&
&bean id=&testJob& class=&com.cjm.web.service.quartz.TestJob&/&
5、业务类源代码
Java代码 &
public&class&TestJob&{
&&&&public&void&execute(){ &&
&&&&&&&&try{ &&
&&&&&&&&&&&& &&
&&&&&&&&}catch(Exception&ex){
&&&&&&&&&&&&ex.printStackTrace(); &&
&&&&&&&&} &&
Java代码 &
public&class&TestJob&{ &&
&&&&public&void&execute(){ &&
&&&&&&&&try{
&&&&&&&&&&&& &&
&&&&&&&&}catch(Exception&ex){
&&&&&&&&&&&&ex.printStackTrace(); &&
&&&&&&&&} &&
public class TestJob {
public void execute(){
}catch(Exception ex){
ex.printStackTrace();
&&& 说明:业务类不需要继承任何父类,也不需要实现任何接口,只是一个普通的java类。
&&&& 在Spring配置和Quartz集成内容时,有两点需要注意
&&&&&&&&&&
1、在&Beans&中不能够设置default-lazy-init=&true&,否则定时任务不触发,如果不明确指明default-lazy-init的值,默认是false。
&&&&&&&&&&
2、在&Beans&中不能够设置default-autowire=&byName&的属性,否则后台会报org.springframework.beans.factory.BeanCreationException错误,这样就不能通过Bean名称自动注入,必须通过明确引用注入。
3、如果启动报:Based&on&configured&schedule,&the&given&trigger&will&never&fire.&&&
原因:被quartz调度的某个任务job的触发者cronTrigger的触发时间通过cron表达式配置了个不合法或过去的时间;该job永远不会被执行到
了这篇文章
类别:未分类┆阅读(0)┆评论(0)spring整合quartz并持久化 - 海子 - ITeye技术网站
博客分类:
spring整合quartz有两种方式:
一.常见是使用配置文件,将定时任务保存到内存中
&!-- 短信催还提醒任务调度 --&
&bean id="overdueRecall"
class="com.sursen.souba.ddlibserve.quartz.OverdueRecallTimerTask" /&
&!--定义定时执行overdueRecallTimerTask 这个bean中的overdueRecall()方法--&
&bean id="overdueRecallTask"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&
&property name="targetObject"&
&ref bean="overdueRecall" /&
&/property&
&property name="targetMethod"&
&value&overdueRecall&/value&
&/property&
&!--触发器的bean的设置,要触发的jobDetail是overdueRecallTask--&
&bean id="overdueRecallTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean"&
&property name="jobDetail"&
&ref bean="overdueRecallTask" /&
&/property&
&property name="cronExpression"&
&!-- 每天17:00运行 --&
&value&0 0 17 * * ?&/value&
&!--&value&0 05 18 * * ?&/value&--&
&/property&
&!--管理触发器的总设置,管理我们的触发器列表,可以在bean的list中放置多个触发器。--&
&bean autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&
&property name="triggers"&
&ref local="overdueRecallTrigger" /&
&/property&
这中方式配置简单,但是存在问题
1.定时任务信息都报错在内存中,服务器重启会丢失信息
2.每个定时任务都是一串配置,定时任务多了不好管理
3.任务时间修改后要重新发布项目
二.quartz持久化(quartz1.6,最新版本的quartz稍有变动)
研究了一下quartz的相关文档,quartz本身就提供将任务和触发器持久化到数据库中的功能
要实现很简单:
1.*** Quartz 数据库表Quartz 包括了所有被支持的数据库平台的 SQL 脚本。你能在 &quartz_home&/docs/dbTables 目录下找到那些 SQL 脚本,这里的 &quartz_home& 是解压 Quartz 分发包后的目录。2.配置 JobStoreTX要告诉 Quartz 运行环境你想使用一个别的 JobStore 而不是默认的 RAMJobStore,你必须配置几个属性。配置它们的顺序无关紧要,只要保证在第一次运行程序之前都做了设置。在你的classpath下加入一个配置文件quartz.properties参数如下:
表 6.3. 可用于设置 JobStoreTX 的配置属性
org.quartz.jobStore.driverDelegateClass
描述:能理解不同数据库系统中某一特定方言的驱动代理
org.quartz.jobStore.dataSource
描述:用于 quartz.properties 中数据源的名称
org.quartz.jobStore.tablePrefix
描述:指定用于 Scheduler 的一套数据库表名的前缀。假如有不同的前缀,Scheduler 就能在同一数据库中使用不同的表。
org.quartz.jobStore.userProperties
描述:"use properties" 标记指示着持久性 JobStore 所有在 JobDataMap 中的值都是字符串,因此能以 名-值 对的形式存储,而不用让更复杂的对象以序列化的形式存入 BLOB 列中。这样会更方便,因为让你避免了发生于序列化你的非字符串的类到 BLOB 时的有关类版本的问题。
org.quartz.jobStore.misfireThreshold
描述:在 Trigger 被认为是错过触发之前,Scheduler 还容许 Trigger 通过它的下次触发时间的毫秒数(译者注:据原文翻译,真的不好理解,实际效果可参看: 我在评论中的实验)。默认值(假如你未在配置中存在这一属性条目) 是 60000(60 秒)。这个不仅限于 JDBC-JobStore;它也可作为 RAMJobStore 的参数
org.quartz.jobStore.isClustered
描述:设置为 true 打开集群特性。如果你有多个 Quartz 实例在用同一套数据库时,这个属性就必须设置为 true。
org.quartz.jobStore.clusterCheckinInterval
描述:设置一个频度(毫秒),用于实例报告给集群中的其他实例。这会影响到侦测失败实例的敏捷度。它只用于设置了 isClustered 为 true 的时候。
org.quartz.jobStore.maxMisfiresToHandleAtATime
描述:这是 JobStore 能处理的错过触发的 Trigger 的最大数量。处理太多(超过两打) 很快会导致数据库表被锁定够长的时间,这样就妨碍了触发别的(还未错过触发) trigger 执行的性能。
org.quartz.jobStore.dontSetAutoCommitFalse
描述:设置这个参数为 true 会告诉 Quartz 从数据源获取的连接后不要调用它的 setAutoCommit(false) 方法。这在少些情况下是有帮助的,比如假如你有这样一个驱动,它会抱怨本来就是关闭的又来调用这个方法。这个属性默认值是 false,因为大多数的驱动都要求调用 setAutoCommit(false)。
org.quartz.jobStore.selectWithLockSQL
SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
描述:这必须是一个从 LOCKS 表查询一行并对这行记录加锁的 SQL 语句。假如未设置,默认值就是 SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE,这能在大部分数据库上工作。{0} 会在运行期间被前面你配置的 TABLE_PREFIX 所替换。
org.quartz.jobStore.txIsolationLevelSerializable
描述:值为 true 时告知 Quartz(当使用 JobStoreTX 或 CMT) 调用 JDBC 连接的 setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE) 方法。这有助于阻止某些数据库在高负载和长时间事物时锁的超时。
示例,使用的是sqlserver数据库:
#org.quartz.scheduler.instanceName = Mscheduler
org.quartz.scheduler.instanceId = AUTO
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 3
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure JobStore
#============================================================================
#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate
org.quartz.jobStore.useProperties = true
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.maxMisfiresToHandleAtATime=1
#============================================================================
# Configure Datasources
#============================================================================
org.quartz.dataSource.myDS.driver =
net.sourceforge.jtds.jdbc.Driver
org.quartz.dataSource.myDS.URL =
jdbc\:jtds\:sqlserver\://ip/dbk
org.quartz.dataSource.myDS.user = db2
org.quartz.dataSource.myDS.password = db2
org.quartz.dataSource.myDS.maxConnections = 5
#============================================================================
# Configure Plugins
#============================================================================
#org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
#org.quartz.plugin.jobInitializer.fileNames = jobs.xml
#org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
#org.quartz.plugin.jobInitializer.failOnFileNotFound = true
#org.quartz.plugin.jobInitializer.scanInterval = 10
#org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
然后可直接运行以下测试类:
package com.sursen.test.
import java.text.ParseE
import mons.lang.StringU
import org.quartz.CronT
import org.quartz.J
import org.quartz.JobD
import org.quartz.S
import org.quartz.SchedulerE
import org.quartz.SchedulerF
import org.quartz.T
import org.quartz.impl.StdSchedulerF
public class QuartzTest
private static SchedulerFactory sf = new StdSchedulerFactory();
private static String JOB_GROUP_NAME = "ddlib";
private static String TRIGGER_GROUP_NAME = "ddlibTrigger";
/**添加一个定时任务,使用默认的任务组名,触发器名,触发器组名*/
public static void addJob(String jobName,Job job,String cronExpression)
throws SchedulerException, ParseException{
addJob(jobName,null,jobName,null,job,cronExpression);
* 添加一个定时任务
* @param jobName 任务名
* @param jobGroupName 任务组名
* @param triggerName 触发器名
* @param triggerGroupName 触发器组名
* @param job
* @param cronExpression
时间设置,参考quartz说明文档
public static void addJob(String jobName,String jobGroupName,
String triggerName,String triggerGroupName,Job job,String cronExpression)
throws SchedulerException, ParseException{
if(StringUtils.isBlank(jobGroupName)){
jobGroupName = JOB_GROUP_NAME;
if(StringUtils.isBlank(triggerGroupName)){
triggerGroupName = TRIGGER_GROUP_NAME;
Scheduler sched = sf.getScheduler();
JobDetail jobDetail = new JobDetail(jobName, jobGroupName, job.getClass());//任务名,任务组,任务执行类
CronTrigger
trigger = new CronTrigger(jobName,triggerGroupName,cronExpression);//触发器名,触发器组,cron表达式
sched.scheduleJob(jobDetail,trigger);
if(!sched.isShutdown()){
sched.start();
* 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
public static void modifyJobTime(String jobName,String cronExpression)
throws SchedulerException, ParseException{
modifyJobTime(jobName, null, cronExpression);
* 修改一个任务的触发时间
public static void modifyJobTime(String triggerName,String triggerGroupName,
String cronExpression)throws SchedulerException, ParseException{
if(StringUtils.isBlank(triggerGroupName)){
triggerGroupName = TRIGGER_GROUP_NAME;
Scheduler sched = sf.getScheduler();
Trigger trigger = sched.getTrigger(triggerName,triggerGroupName);
if(trigger != null){
CronTrigger ct = (CronTrigger)
//修改时间
ct.setCronExpression(cronExpression);
//重启触发器
sched.resumeTrigger(triggerName,triggerGroupName);
/**移除一个任务和触发器(使用默认的任务组名,触发器名,触发器组名)*/
public static void removeJob(String jobName,String triggerName)
throws SchedulerException{
removeJob(jobName, null, triggerName, null);
/**移除一个任务和触发器 */
public static void removeJob(String jobName,String jobGroupName,
String triggerName,String triggerGroupName)
throws SchedulerException{
if(StringUtils.isBlank(jobGroupName)){
jobGroupName = JOB_GROUP_NAME;
if(StringUtils.isBlank(triggerGroupName)){
triggerGroupName = TRIGGER_GROUP_NAME;
Scheduler sched = sf.getScheduler();
sched.pauseTrigger(triggerName,triggerGroupName);//停止触发器
sched.unscheduleJob(triggerName,triggerGroupName);//移除触发器
sched.deleteJob(jobName,jobGroupName);//删除任务
public static void main(String[] args) throws SchedulerException, ParseException {
addJob("test", new TestJob(), "*/5 * * * * ?");
addJob("zht", new TestJob(), "*/10 * * * * ?");
removeJob("myJob","myJobGroup", "myTrigger","myTriggerGroup");
removeJob("test","test");
removeJob("zht","zht");
三.spring下quartz的持久化
在spring配置文件中加入以下代码
&!-- quartz持久化存储
&bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean" &
&property name="dataSource"&
&ref bean="ddlibserveDataSource" /&
&/property&
&property name="schedulerName" value="Mscheduler" /&
&property name="configLocation" value="classpath:quartz.properties" /&
&property name="applicationContextSchedulerContextKey"
value="applicationContextKey" /&
&property name="autoStartup" value="true" /&
&bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean" &
注入到所需要的service中即可.
&property name="dataSource"&
&ref bean="ddlibserveDataSource" /&
&/property&
为注入的数据源,
如果使用这种方式那配置文件中的相关配置要注释掉.
或者将配置文件中信息写入到spring配置文件中:
&!-- quartz持久化存储
&bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean" &
&property name="dataSource"&
&ref bean="ddlibserveDataSource" /&
&/property&
&!--方式一 : quartz.properties配置文件是放在classpath下
&property name="configLocation" value="classpath:quartz.properties" /& --&
&!--方式二 : quartz.properties配置文件是放在WEB-INF下
&property name="configLocation" value="/WEB-INF/quartz.properties" /& --&
&!--方式三 : quartz.properties配置文件写入到配置XML中 --&
&property name="quartzProperties"&
&prop key="org.quartz.scheduler.instanceName"&quartzScheduler&/prop&
&prop key="org.quartz.scheduler.instanceId"&AUTO&/prop&
&prop key="org.quartz.threadPool.class"&org.quartz.simpl.SimpleThreadPool&/prop&
&prop key="org.quartz.threadPool.threadCount"&3&/prop&
&prop key="org.quartz.threadPool.threadPriority"&5&/prop&
&prop key="org.quartz.jobStore.misfireThreshold"&60000&/prop&
&prop key="org.quartz.jobStore.class"&org.quartz.impl.jdbcjobstore.JobStoreTX&/prop&
&prop key="org.quartz.jobStore.driverDelegateClass"&org.quartz.impl.jdbcjobstore.MSSQLDelegate &/prop&
&prop key="org.quartz.jobStore.selectWithLockSQL"&SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?&/prop&
&prop key="org.quartz.jobStore.tablePrefix"&QRTZ_&/prop&
&prop key="org.quartz.jobStore.isClustered"&true&/prop&
&prop key="org.quartz.jobStore.clusterCheckinInterval"&20000&/prop&
&/property&
&property name="applicationContextSchedulerContextKey"
value="applicationContextKey" /&
&property name="autoStartup" value="true" /&
期间遇到的问题留作记录:
1.持久化时遇到报字段不正确或表不存在的问题
原因: 我使用的是quartz 2.1建的表而jar包是1.6的
解决方法: 将建表语句和jar包统一版本即可
2.报dataSource name不存在的问题
原因: quartz.properties中的 org.quartz.jobStore.dataSource = myDS
忘记打开或者与数据源配置没有保持一致
解决方法: 打开保持一致即可
3.使用注入dataSource时报
Failure obtaining db row lock: 第 1 行: FOR UPDATE 子句仅允许用于 DECLARE CU...
改为数据源写在quartz.properties中解决
还不清楚为什么注入不行(解决)
org.quartz.jobStore.selectWithLockSQL
SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
描述:这必须是一个从 LOCKS 表查询一行并对这行记录加锁的 SQL 语句。假如未设置,默认值就是 SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE,这能在大部分数据库上工作。{0} 会在运行期间被前面你配置的 TABLE_PREFIX 所替换。
这条sql在sqlserver2000中不能运行修改为:
org.quartz.jobStore.selectWithLockSQL=SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?
4. &property name="configLocation" value="classpath:quartz.properties" /&
这种方式配置quartz.properties文件需要放在classpath下,而我们项目中都是放在Web-info下
可直接修改为:
&property name="configLocation" value="/WEB-INF/quartz.properties" /&
5.在spring配置文件中
&bean id="quartzServiceImpl"
class="com.sursen.test.service.impl.QuartzServiceImpl"&
&property name="scheduler"&
&ref bean="scheduler" /&
&/property&
以这种方式将scheduler即StdScheduler
scheduler注入到相关service中报找不到该property的错误
而service中是肯定存在的 : private StdS
改为spring的注解形式注入
@Autowired
private StdS
也不行,再改为
private StdS
@Qualifier("scheduler")
private StdS
则没有问题,具体原因还在查找
浏览 29545
haiziwoainixx
浏览: 208595 次
来自: 北京
基于微博数据检测的Solr实战开发课程观看地址:http:// ...
基于微博数据检测的Solr实战开发课程观看地址:http:// ...
基于微博数据检测的Solr实战开发课程观看地址:http:// ...
写的不错,非常详细
期待!……1299人阅读
任务调度(2)
quartz定时任务时间设置:
这些星号由左到右按顺序代表 :
格式: [秒] [分] [小时] [日] [月] [周] [年]
通配符说明:
* 表示所有值. 例如:在分的字段上设置 "*",表示每一分钟都会触发。
? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为 0 0 0 10 * ?
- 表示区间。例如 在小时上设置 "10-12",表示 10,11,12点都会触发。
, 表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发
/ 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。在月字段上设置'1/3'所示每月1号开始,每隔三天触发一次。
L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示“本月最后一个星期五"
W 表示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 "1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区间"-").
'L'和 'W'可以一组合使用。如果在日字段上设置"LW",则表示在本月的最后一个工作日触发(一般指发工资 )
序号(表示每月的第几个周几),例如在周字段上设置"6#3"表示在每月的第三个周六.注意如果指定"#5",正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了)
周字段的设置,若使用英文字母是不区分大小写的 MON 与mon相同.
0 0 12 * * ? 每天12点触发
0 15 10 ? * * 每天10点15分触发
0 15 10 * * ? 每天10点15分触发
0 15 10 * * ? * 每天10点15分触发
0 15 10 * * ? 年每天10点15分触发
0 * 14 * * ? 每天下午的 2点到2点59分每分触发
0 0/5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)
0 0/5 14,18 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发)
每天下午的 18点到18点59分(整点开始,每隔5分触发)
0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发
0 10,44 14 ? 3 WED 3月分每周三下午的 2点10分和2点44分触发 (特殊情况,在一个时间设置里,执行两次或
两次以上的情况)
0 59 2 ? * FRI 每周5凌晨2点59分触发
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年每月最后一周的星期五的10点15分触发
0 15 10 ? * 6#3 每月的第三周的星期五开始触发
0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次
0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节)
0 51 15 26 4 ? 年4月26日15点51分出发
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:156682次
积分:2601
积分:2601
排名:第11231名
原创:101篇
转载:14篇
评论:56条
邮箱交流:
文章:10篇
阅读:26905
文章:70篇
阅读:111754
(6)(4)(5)(6)(7)(4)(4)(9)(33)(32)(2)(1)(2)

参考资料

 

随机推荐