摘要:如果需要像日历那样按日程来触发任务,而不是像SimpleTrigger 那样每隔特定的间隔时间触发,CronTriggers通常比SimpleTrigger更有用。

一、web.xml:

<servlet>
<servlet-name>boot</servlet-name>
<servletclass>xxx.xx.x.BootServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

二、创建BootServlet.java

  

public class BootServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
//初始化数据库
new SrvInitDB().initDB();
//启动预警触发器
startExpenseRemain();
}
/***/
public void startExpenseRemain(){
try {
  Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
  scheduler.start();
  //每周的周五进行一次
  JobDetail expenseRemindJob = new JobDetail("ExpenseRemindJob",null,ExpenseRemindJob.class);
  CronTrigger expenseRemindJobTrigger=new CronTrigger("expenseRemindJobTrigger");
  expenseRemindJobTrigger.setStartTime(new Date());
  expenseRemindJobTrigger.setCronExpression("0 0 12 ? * FRI");
  scheduler.scheduleJob(expenseRemindJob, expenseRemindJobTrigger);
 } catch (SchedulerException e) {
   e.printStackTrace();
 } catch (ParseException e) {
  e.printStackTrace();
 }
}
}

三、创建Job:ExpenseRemindJob.java

public class ExpenseRemindJob implements Job{
  public void execute(JobExecutionContext arg0) throws JobExecutionException {
   sendExpenseSubjectRemind();
}
  /***/
  public synchronized void sendExpenseSubjectRemind(){   } }

注:

其中new CronTrigger("xxx").setCronExpression("0 0 12 ? * FRI");
共计7个子表达式都描述了一个单独的日程细节。这些子表达式用空格分隔,分别表示: 
1. Seconds 秒 
2. Minutes 分钟 
3. Hours 小时 
4. Day-of-Month 月中的天 
5. Month 月 
6. Day-of-Week 周中的天 ("MON-FRI", "MON, WED, FRI"或者甚至"MON-WED,SAT")
7. Year (optional field) 年(可选的域) 
一个cron表达式的例子字符串为"0 0 12 ? * WED",这表示“每周三的中午12:00”。

所有的域中的值都有特定的合法范围,这些值的合法范围相当明显,例如:秒和分域的合法值为0到59,小时的合法范围是0到23,Day-of-Month中值得合法凡范围是0到31,但是需要注意不同的月份中的天数不同。月份的合法值是0到11。

    或者用字符串JAN,FEB MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV 及DEC来表示。Days-of-Week可以用1到7来表示(1=星期日)或者用字符串SUN, MON, TUE, WED, THU, FRI 和SAT来表示.

  通配符('*')可以被用来表示域中“每个”可能的值。因此在"Month"域中的*表示每个月,而在Day-Of-Week域中的*则表示“周中的每一天”。

  '?'字符可以用在day-of-month及day-of-week域中,它用来表示“没有指定值”。
    这对于需要指定一个或者两个域的值而不需要对其他域进行设置来说相当有用。

  '/'字符用来表示值的增量,例如, 如果分钟域中放入'0/15',它表示“每隔15分钟,从0开始”,
    如果在分钟域中使用'3/20',则表示“小时中每隔20分钟,从第3分钟开始”或者另外相同的形式就是'3,23,43'。

  'L'字符可以在day-of-month及day-of-week中使用,这个字符是"last"的简写,但是在两个域中的意义不同。

    例如,在day-of-month域中的"L"表示这个月的最后一天,即,一月的31日,非闰年的二月的28日。
    如果它用在day-of-week中,则表示"7"或者"SAT"。但是如果在day-of-week域中,这个字符跟在别的值后面,则表示"当月的最后的周XXX"。
    例如:"6L" 或者 "FRIL"都表示本月的最后一个周五。当使用'L'选项时,最重要的是不要指定列表或者值范围,否则会导致混乱。

  'W' 字符用来指定距离给定日最接近的周几(在day-of-week域中指定)。
    例如:如果你为day-of-month域指定为"15W",则表示“距离月中15号最近的周几”。

  '#'表示表示月中的第几个周几。例如:day-of-week域中的"6#3" 或者 "FRI#3"表示“月中第三个周五”。

Java触发器CronTrigger的更多相关文章

  1. [代码]JAVA触发器,Spring的quartz配置

    Spring的quartz中的配置代码,spring-quartz.xml: <?xml version="1.0" encoding="UTF-8"?& ...

  2. java触发器的学习

         public class OpenVirtualService {             public void open(){ //虚机开通                //业务逻辑 ...

  3. (转)Java任务调度框架Quartz入门教程指南(四)Quartz任务调度框架之触发器精讲SimpleTrigger和CronTrigger、最详细的Cron表达式范例

    http://blog.csdn.net/zixiao217/article/details/53075009 Quartz的主要接口类是Schedule.Job.Trigger,而触发器Trigge ...

  4. [JAVA]定时任务之-Quartz使用篇

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...

  5. Quartz应用实践入门案例二(基于java工程)

    在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任 ...

  6. java配置自动任务,定期执行代码

    任务调用类: package business.tools.service; import java.util.ArrayList; import java.util.Calendar; import ...

  7. [转][JAVA]定时任务之-Quartz使用篇

    [BAT][JAVA]定时任务之-Quartz使用篇 定时任务之-Quartz使用篇 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与 ...

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

    注:这里使用的是Quartz1.6.5版本号(包:quartz-1.6.5.jar) //測试main函数 //QuartzTest.java package quartzPackage; impor ...

  9. Java任务调度框架Quartz教程

    一.什么是quartz作业调度? Quartz框架是一个全功能.开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统.Quartz可以执行上千上万的任务调度. ...

随机推荐

  1. 孙鑫MFC学习笔记4:MFC画图

    1.画线方法 *1.捕获鼠标按下和弹起消息,获取两个点 *2.消息响应,画线 2.在CMainFrame类中的鼠标左键事件得不到响应的原因是CNameView覆盖了CMainFrame 3.注释宏 4 ...

  2. 图说hibernate注释--xml里配置参数(一)

    ****************************************************************************************[来自我另一博文]

  3. hibernate------java-delete-insert-update

    **************************************************************************************************** ...

  4. springmvc中RequestMapping的解析

    在研究源码的时候,我们应该从最高层来看,所以我们先看这个接口的定义: package org.springframework.web.servlet; import javax.servlet.htt ...

  5. PyCharm不能自动import解决方法_PyCharm cannot auto import package troubleshooting

    本人起初是用Eclipse+Pydev学习python的,其实也觉得挺好用.不过后来因为同事推荐去试了下PyCharm,就一发不可收拾的爱上了. 严格来说,题目上的问题其实对于很多人都不算是问题,但是 ...

  6. 第 13 章 CSS 选择器[上]

    学习要点: 1.选择器总汇 2.基本选择器 3.复合选择器 4.伪元素选择器 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS 选择器,通过选择器定位到想要设置样式的元素.目前 CSS 选择器的 ...

  7. Scalaz(46)- scalaz-stream 基础介绍

    scalaz-stream是一个泛函数据流配件库(functional stream combinator library),特别适用于函数式编程.scalar-stream是由一个以上各种状态的Pr ...

  8. Lisp学习--Windows下面的开发环境搭建

    很久以前,就准备学习Lisp,但是遇到不少困难,社区太凌乱,也一直很犹豫,直到看了<Common Lisp - 想说爱你不容易>,想看看Common Lisp怎么样,之前都是拿Lisp的方 ...

  9. jQuery中的事件与动画 (你的明天Via Via)

    众所周知,页面在加载时,会触发load事件:当用户单击某个按钮时,会触发该按钮的click事件. 这些事件就像日常生活中,人们按下开关,灯就亮了(或者灭了),往游戏机里投入游戏币就可以启动游戏一样, ...

  10. oracle表的管理

    表名和列的命名规则 必须以字母开头: 长度不能超过30字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z,a-z,0-9,$,#等:   数据类型: 字符型: char       定长 ...