用java的Quartz包定时调用方法,我想实现每隔一个半小时调用一次方法, 请问Corn表达式怎么写?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java的Quartz包定时调用方法,我想实现每隔一个半小时调用一次方法, 请问Corn表达式怎么写?相关的知识,希望对你有一定的参考价值。

谢谢大家的回答,但是都不是我想要的,项目中我是使用spring和quartz结合。
具体流程:
1、启动系统时 走监听( implements ServletContextListener ) 监听中配置任务及时间
2、系统运行中可能会对任务执行的周期进行修改

各位看看,这个 表达式是否正确: 每隔一个半小时执行一次 0 0/30 0/1 * * ?

如果采用CronTrigger 这表达式不行的话 采用 SimpleTrigger的话 怎么让任务在初始化之后就按照指定间隔时间去周期性执行任务同时支持执行周期可编辑,谢谢!

结合spring框架写的
<bean id="cronTriggerPay" 
 class="org.springframework.scheduling.quartz.CronTriggerBean">
 <property name="jobDetail">
  <!-- 使用嵌套Bean的方式来定义任务Bean -->
  <bean 
  class="org.springframework.scheduling.quartz.JobDetailBean">
  <!-- 指定任务Bean的实现类 -->
   <property name="jobClass"
    value="org.seu.yto.schedule.PayJob"/>
   <!-- 为任务Bean注入属性 -->
   <property name="jobDataAsMap">
    <map>
     <entry key="empMgr" value-ref="empManager"/>
    </map>
   </property>
  </bean>
 </property>
 <!-- 指定Cron表达式:每月1日6点启动 -->
 <property name="cronExpression" value="0 0 6 1 * ? *"/>
</bean>
<!-- 定义触发器来管理任务Bean -->
<bean id="cronTriggerPunch" 
 class="org.springframework.scheduling.quartz.CronTriggerBean">
 <property name="jobDetail">
  <!-- 使用嵌套Bean的方式来定义任务Bean -->
  <bean
  class="org.springframework.scheduling.quartz.JobDetailBean">
   <!-- 指定任务Bean的实现类 -->
   <property name="jobClass" 
    value="org.seu.yto.schedule.PunchJob"/>
   <!-- 为任务Bean注入属性 -->
   <property name="jobDataAsMap">
    <map>
     <entry key="empMgr" value-ref="empManager"/>
    </map>
   </property>
  </bean>
 </property>
 <!-- 指定Cron表达式:周一到周五8点、12点执行调度 -->
 <property name="cronExpression" 
  value="0 0 8,12 ? * MON-FRI"/>
</bean>
<!-- 执行实际的调度调度 -->
<bean 
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
 <property name="triggers">
  <list>
   <ref local="cronTriggerPay"/>
   <ref local="cronTriggerPunch"/>
  </list>
 </property>
</bean>

参考技术A 应该是 Linux 下的 cron job 吧

*/30 * * * * /你需要执行的代码

用 crontab -e 去修改你的cron job 跟vi 命令差不多
cron job ref link ; http://www.tsingfeng.com/tag/cronjob/
参考技术B 你参考一下,一样的。。
package com.test;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class CallGirl implements Job

public void execute(JobExecutionContext context)
throws JobExecutionException
System.out.println("正在打电话给女友...");
System.out.println("getTrigger().getName():"
+ context.getTrigger().getName());



[java]
package com.test;

import java.text.ParseException;
import java.util.Date;

import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzMainer
public static void main(String[] args) throws SchedulerException,
ParseException

Scheduler handsomeMan = new StdSchedulerFactory().getScheduler();

// CallGirl.class 回调类
JobDetail concerneGirl = new JobDetail("任务的名称", "group1",
CallGirl.class);
JobDetail tt = new JobDetail("任务的名称1", "group2", CallGirl.class);

// 10 重复次数,2000L 周期
SimpleTrigger momentTrigger = new SimpleTrigger("trigger1", "group1",
new Date(), null, 10, 1000L);

CronTrigger t = new CronTrigger("trigger2", "group2",
"0 24 13 * * ? * ");

// way 2
// 若时间到,即使重复100000000次也没有用
long startTime = System.currentTimeMillis();
SimpleTrigger momentTrigger2 = new SimpleTrigger("trigger2", "group1");
momentTrigger2.setStartTime(new Date(startTime));
momentTrigger2.setEndTime(new Date(startTime + 6000L));
momentTrigger2.setRepeatCount(10);
momentTrigger2.setRepeatInterval(1000L);

// 帅哥通过时刻Trigger来调度关心女友这个job
handsomeMan.scheduleJob(concerneGirl, momentTrigger);
handsomeMan.scheduleJob(tt, t);

// 开始
handsomeMan.start();


CronTrigger配置格式:
格式: [秒] [分] [小时] [日] [月] [周] [年]

序号 说明 是否必填 允许填写的值 允许的通配符
1 秒 是 0-59 , - * /
2 分 是 0-59 , - * /
3 小时 是 0-23 , - * /
4 日 是 1-31 , - * ? / L W
5 月 是 1-12 or JAN-DEC , - * /
6 周 是 1-7 or SUN-SAT , - * ? / L #
7 年 否 empty 或 1970-2099 , - * /
通配符说明:
* 表示所有值. 例如:在分的字段上设置 "*",表示每一分钟都会触发。
? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的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 * * ? 2005 2005年每天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 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 每月的第三周的星期五开始触发
0 0 12 1/5 * ? 每月的第一个中午开始每隔5天触发一次
0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节)追问

谢谢大家的回答,但是都不是我想要的,各位看看,这个 表达式是否正确: 每隔一个半小时执行一次 0 0/30 0/1 * * ?

参考技术C "0 0,30 * * * ?"

整点和半点

以上是关于用java的Quartz包定时调用方法,我想实现每隔一个半小时调用一次方法, 请问Corn表达式怎么写?的主要内容,如果未能解决你的问题,请参考以下文章

Quartz的定时任务。我要每隔24小时执行一次。Quartz怎么设置。

使用quartz.jar quartz-jobs.jar 实现定时任务 。实现 定时采集 接口数据

Quartz使用-入门使用(java定时任务实现)

java定时任务调度工具Timer与Quartz的区别

spring 定时调度

SpringBoot集成Quartz动态定时任务