java spring 定时任务_java定时任务以及Spring使用Quartz调度器执行定时任务

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线程都会取消。

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

定时任务在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依赖

org.quartz-scheduler

quartz

2.2.2

创建Job类

public class ShowTimeJob {

private void showTime() {

System.out.println("每秒执行:" + new Date());

}

}

在ApplicationContext.xml中配置作业类

class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

配置触发器:Quartz提供两种触发器形式,cron和simple两种。

class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

配置工厂类,管理

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值