java下的java.util.Timer中类可以实现定时执行任务的执行:

如:让任务立即执行,每隔1s循环执行一次

	public class TimerClass {

		public static void main(String[] args) {

			Timer timer = new Timer();

			TimerTask task = new TimerTask() {
int i = 0; @Override
public void run() {
i += 1;
System.out.println("第" + i + "次执行");
}
};
// 第二个参数,表示多长时间开始执行调度任务,
// 第三个参数间隔多长时间执行
timer.schedule(task, 0, 1000); } }
  • Timer缺陷:

    • Timer对调度的支持是基于绝对时间的,而不是相对时间,所以它对系统时间的改变非常敏感。
    • Timer线程是不会捕获异常的,如果TimerTask抛出的了未检查异常则会导致Timer线程终止,同时Timer也不会重新恢复线程的执行,他会错误的认为整个Timer线程都会取消。

缺陷:http://blog.csdn.net/chenssy/article/details/32703499

使用Executors管理线程,调用newScheduledThreadPool()方法来执行重复任务

http://www.jianshu.com/p/a898655b787a

定时任务在Spring中的应用

一、Spring3.0以后提供了基于Spring的轻量级时间调度框架,可定时执行一些任务

二、Spring中使用Quartz框架来做调度任务:主要讲述Quartz在Spring中的用法。

  • 从任务调度的触发时机来分,这里主要是针对作业使用的触发器,主要有以下两种:

    • 每隔指定时间则触发一次,在Quartz中对应的触发器为:org.springframework.scheduling.quartz.SimpleTriggerBean
    • 每到指定时间则触发一次,在Quartz中对应的调度器为:org.springframework.scheduling.quartz.CronTriggerBean
  • 从作业类的继承方式来讲,可以分为两类:

    • 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。
    • 作业类即普通的java类,不需要继承自任何基类。

主要说明作业类不继承特定基类的方式。

Spring能够支持这种方式,归功于两个类:

org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean

org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

这两个类分别对应spring支持的两种实现任务调度的方式,即前文提到到java自带的timer task方式和Quartz方式。这里我只写MethodInvokingJobDetailFactoryBean的用法,使用该类的好处是,我们的任务类不再需要继承自任何类,而是普通的pojo。

  • maven依赖

      <dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.2</version>
    </dependency>
  • 创建Job类

      public class ShowTimeJob {
    
      	private void showTime() {
    
      		System.out.println("每秒执行:" + new Date());
    
      	}
    
      }
  • 在ApplicationContext.xml中配置作业类

      <!-- 配置作业类 -->
    <bean id="job1"
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject">
    <bean class="com.yl.page.job.ShowTimeJob" />
    </property>
    <property name="targetMethod" value="showTime" />
    <property name="concurrent" value="true" /><!-- 作业并发调度 -->
    </bean>
  • 配置触发器:Quartz提供两种触发器形式,cron和simple两种。

      <!-- 配置触发器两种配置一种即可,配置两种不行 -->
    <!-- CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次等。 -->
    <bean id="cronTrigger"
    class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="job1" />
    <!-- 0 36 20 * * ? -->
    <!-- Cron生成器网址:http://cron.qqe2.com/ -->
    <property name="cronExpression" value="10/5 * * * * ?" />
    </bean> <!-- SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次。 -->
    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
    <property name="jobDetail" ref="job1" />
    <property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 -->
    <property name="repeatInterval" value="2000" /><!-- 每2秒调度一次 -->
    </bean>
  • 配置工厂类,管理

      <!-- 配置工厂类 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
    <list>
    <ref bean="cronTrigger" />
    <ref bean="simpleTrigger" />
    </list>
    </property>
    </bean>

使用cron的时候,可以使用cron表达式来对配置执行的时间,次数等,cron表达式生成器网址:http://cron.qqe2.com

其他更多可以参考:http://gong1208.iteye.com/blog/1773177

Demo:https://github.com/esileme/MybatisPager.git

java定时任务以及Spring使用Quartz调度器执行定时任务的更多相关文章

  1. Spring中Quartz调度器的使用

    一.Quartz的特点 * 按作业类的继承方式来分,主要有以下两种: 1.作业类继承org.springframework.scheduling.quartz.QuartzJobBean类的方式 2. ...

  2. Quartz源码——Quartz调度器的Misfire处理规则(四)

    Quartz调度器的Misfire处理规则 调度器的启动和恢复中使用的misfire机制,还需细化! SimpleTrigger的misfire机制 默认的 Trigger.MISFIRE_INSTR ...

  3. 使用Quartz.net来执行定时任务

    Quartz.net使用方法:http://www.cnblogs.com/lizichao1991/p/5707604.html 最近,项目中需要执行一个计划任务,组长就让我了解一下Quartz.n ...

  4. Quartz定时任务学习(四)调度器

    org.quartz.Scheduler 类层次 作为一个 Quartz 用户,你要与实现了 org.quartz.Scheduler 接口的类交互.在你调用它的任何 API 之前,你需要知道如何创建 ...

  5. [转]ssh中如何实现定时任务(spring对quartz的支持)

    原文地址:http://blog.csdn.net/qq_18675693/article/details/50413889 实现定时任务:quartz spring中对quartz进行了封装,使得我 ...

  6. 定时任务之Spring与Quartz的整合(有修改)

    转摘:http://www.javaweb1024.com/java/JavaWebzhongji/2015/04/13/548.html 在Spring中使用Quartz有两种方式实现:第一种是任务 ...

  7. Spring的quartz定时器重复执行二次的问题解决

    Spring的quartz定时器同一时刻重复执行二次的问题解决 最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的ha ...

  8. 通过spring 中的@Scheduled来执行定时任务

    以前开发定时任务的功能的时候,是框架里面写好的quartz配置方式,由于功力尚浅,感觉定时跑披定时任务什么的云里雾里,很高大上,每次都不知道怎么修改配置,后来几次接触定时任务发现,还是比较好掌握的,特 ...

  9. Spring中使用注解 @Scheduled执行定时任务

    注解@Scheduled 使用方式 注解@Scheduled 可以作为一个触发源添加到一个方法中,例如,以下的方法将以一个固定延迟时间5秒钟调用一次执行,这个周期是以上一个调用任务的完成时间为基准,在 ...

随机推荐

  1. grep,find

    grep是强大的文本搜索工具,他可以对文件逐行查看,如果找到匹配的模式,就可以打印出包含次模式的所有行,并且支持正则表达式 find查找文件的grep是来查找字符串的,文件的内容 grep 文件的内容 ...

  2. 反转链表算法Java实现

    之前遇到反转链表的算法,比较晦涩难解,但其实挺简单的. 目标:将一个顺序链表反转. 思路:用三个辅助节点,每次实现一个节点的指向反转,即他的后继变为他的前驱. 三个辅助节点: p  q  r  按顺序 ...

  3. Java红黑树详谈

    定义 红黑树的主要是想对2-3查找树进行编码,尤其是对2-3查找树中的3-nodes节点添加额外的信息.红黑树中将节点之间的链接分为两种不同类型,红色链接,他用来链接两个2-nodes节点来表示一个3 ...

  4. noj算法 装载问题 回溯法

    描述: 有两艘船,载重量分别是c1. c2,n个集装箱,重量是wi (i=1…n),且所有集装箱的总重量不超过c1+c2.确定是否有可能将所有集装箱全部装入两艘船. 输入: 多个测例,每个测例的输入占 ...

  5. Confluence 6 管理协同编辑

    协同编辑能够让项目小组中的协同合作达到下一个高度.这个页面对相关协同编辑中的问题进行了讨论,能够提供给你所有希望了解的内容. 进入 Collaborative editing 页面来获得项目小组是如何 ...

  6. 【Windows】添加定时任务不执行

    [问题]windows定时任务不执行.在“所有程序->附件->系统工具->任务计划程序”中添加了定时调用“D:\sys_task\bugmanager\run.bat”脚本的任务计划 ...

  7. leetcode(js)算法之914卡牌分组

    给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 X > ...

  8. linux和windows下,C/C++开发的延时函数,sleep函数

    简介: 函数名: sleep   功 能: 执行挂起一段时间   用 法: unsigned sleep(unsigned seconds);   在VC中使用带上头文件   #include < ...

  9. 【linux】环境变量配置

    假设要添加环境变量 JAVA_HOME 1.先用自己的个人账号 vim /etc/profile 在文件末尾添加 export JAVA_HOME=/usr/java/jdk1..0_144 2. s ...

  10. Python实战二

    要求:按照要求完成对文件的增.删.改.查操作. def add(**kwargs): '''新增内容,在指定位置新增''' while True: flag = False with open(&qu ...