java相关:Spring中实现定时调度的几种方法

发布于 2020-11-28|

复制链接

本篇文章主要介绍了Spring中实现定时调度示例,可以在无人值守的时候系统可以在某一时刻执行某些特定的功能,有兴趣的可以了解一下。

1,内容简介所谓的定时调度,是指在无人值守的时候系统可以在某一时刻执行某些特定的功能采用的一种机制,对于传统的开发而言,定时调度的操作分为两种形式: 定时触发:到某一时间点上执行某些处理操作; 间隔触发:每隔几秒后进行某些操作的自动处理。所有的处理都依赖于计算机系统底层的时钟发生器,在java最初的实现过程里面,真对于定时处理专门提供有两个类:Timer,TimerTask两个类,其中TimerTask主要是定义任务的执行,相当于启动一个线程去执行某些任务。

```java

public class MyTask extends TimerTask{

@Override

public void run() {//定义要执行的任务

// TODO Auto-generated method stub

String currentTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());

System.out.println(currentTime);

}

}

public class MyTaskTest {

public static void main(String[] args) {

Timer timer=new Timer();

timer.schedule(new MyTask(), 1000);//启动任务,延迟1秒后执行。

}

}

```

但是,如果要求要在每年的某月某时某分某秒执行某个任务,使用Timer和TimerTask就无能为力了。在项目开发中往往会有两种定时控制的选择:quartz组件:企业及定时调度组件,需要单独配置;SpringTask:轻量级组件,配置简单,可以利用Annotation实现配置处理。2,Quartz定义定时调度使用Quartz组件,我们需要导入quartz的开发包,在pom.xml中添加quartz的开发包。

```xml

org.quartz-scheduler

quartz

2.2.3

```

引入包后,就可以进行定时调度的开发了。有两种实现模式:去继承QuartzJobBean父类;直接利用配置就可以实现方法的调度控制。1,继承一个父类实现任务的处理。

```java

public class MyTask2 extends QuartzJobBean{

@Override

protected void executeInternal(JobExecutionContext context) throws JobExecutionException {

// TODO Auto-generated method stub

String currentTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());

System.out.println(currentTime);

System.out.println("具体的任务实现!!!");

}

}

```

所有的定时调度的启用都要在Spring的控制文件中完成,即,不需要去写一个明确的类来进行定时任务启用。2,在applicationContext.xml文件中增加定时调度的配置,通过定时调度工厂类实现。

```xml

```

随后配置任务的触发作业,对于作业的配置有两类:使用间隔触发:若干时间之后重复执行;工厂类:org.springframework.scheduling.quartz.SimpleTriggerFactoryBean

```xml

```

设置间隔触发调度器:org.springframework.scheduling.quartz.SchedulerFactoryBean

```xml

```

3,此时所有的间隔触发控制都交由Spring管理了,现在只需要启动Spring容器即可实现间隔触发任务。使用Cron实现定时触发Quartz不仅可以实现间隔触发,它还可以结合Cron实现定时触发,这也是它最重要的功能。一般项目中使用最多的模式:小时触发,月初触发,年初触发。修改之前的间隔触发配置,使用CronTriggerFactoryBean实现定时触发。

```xml

```

启动Spring容器即可实现。2,不继承任何类实现定时调度在项目开发中,继承直接会导致单继承的局限控制,所以在这种情况下Spring中提供了一种可以不继承任何类即可实现定时操作的任务处理。定义一个任务执行类,不继承任何类。

```java

public class MyTask2 {

public void taskSelf(){

String task=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new java.util.Date());

System.out.println(task);

System.out.println("执行具体任务操作");

}

}

```

在applicationContext.xml在配置工厂类:org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

```xml

```

随后在任务调度配置上配置新的程序类

```xml

```

启动容器即可实现定时调度。这种模式没有类的继承依赖,处理会更加灵活。Spring Task实现定时调度在Spring中自己有对定时调度的支持,使用起来感觉比Quartz还要好用。它有两种实现方式,1,在applicationContext.xml中配置实现;2,使用Annotation实现。不过使用什么模式,必须先有一个任务处理类。定义任务处理类。这里直接使用之前的MyTask2类,不再重复写。 修改applicationContext.xml文件:需要追加task处理的命名空间定义:

```xml

```

1配置task操作的配置,实现间隔触发。

```xml

```

使用cron实现定时触发

```xml

```

java定时调度main方法_java相关:Spring中实现定时调度的几种方法相关推荐

  1. python运行方法_对python中执行DOS命令的3种方法总结

    1. 使用os.system("cmd") 特点是执行的时候程序会打出cmd在Linux上执行的信息. import os os.system("ls") 2. ...

  2. java 窗体添加背景图片_Java Swing实现窗体添加背景图片的2种方法详解

    本文实例讲述了java Swing实现窗体添加背景图片的2种方法.分享给大家供大家参考,具体如下: 在美化程序时,常常需要在窗体上添加背景图片.通过搜索和测试,发现了2种有效方式.下面分别介绍. 1. ...

  3. c语言中字符串去掉逗号,JS四种方法去除字符串最后的逗号

    window.οnlοad=function() { var obj = {name: "xxx", age: 30, sex: "female"};//定义一 ...

  4. java 获取键盘点击_Java中获取键盘输入值的三种方法介绍

    程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这 ...

  5. java 当月最后一天_java中取得当月最后一天的四种方法

    java中取得当月最后一天的四种方法 第一种,使用Calendar的roll方法,在限制某个日期字段不改变的形式下,改变其他日期字段的值. 第二种,使用Calendar的getActualMaximu ...

  6. java indexof 子字符串_Java中字符串中子串的查找共有四种方法(indexof())

    Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现的指定子字符串在此 ...

  7. java 中lock,java中lock获取锁的四种方法

    在java接口中会存放着许多方法,方便线程使用时的直接调用.对于lock接口大家都不陌生,我们已经初步对概念进行了理解.那么在获取锁的方法上想必还不是很清楚.下面我们就lock获取锁的四种方法分别进行 ...

  8. Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...

    Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn   发布于:2012-09-15 ...

  9. Spring系列之集成MongoDB的2种方法,你知道嘛?

    Spring系列之集成MongoDB的2种方法,你知道嘛? MongoDB是最流行的NoSQL数据库,SpringBoot是使用Spring的最佳实践.今天带大家讲一讲SpringBoot集成Mong ...

最新文章

  1. akaze特征匹配怎么去掉不合适的点_SIFT特征点
  2. c#_关键字base
  3. SpringCloud教程-消息总线Bus 服务端(server)刷新(SpringCloud版本Greenwich.SR4)
  4. 微服务架构下,解决数据一致性问题的实践 2
  5. 前端学习(3171):react-hello-react之reduce
  6. windows签名证书流程
  7. 什么是空间分配担保策略?
  8. php 读写excel 网络错误,谁用过PHPExcel,导出的文件报“无法读取的内容”错误
  9. linux(ubuntu)下C++访问mysql数据库
  10. 纺织品外观疵点及其成因分析大全
  11. 阿里“拆台”,中台真的不香了?
  12. vue项目基本环境的配置与初始化
  13. matlab编程椅子放平问题,数学模型程序代码Matlab-姜启源-第一章-建立数学模型.docx...
  14. bigdecimal不等于0怎么写_我不知道三打白骨精读后感怎么写才算正能量
  15. MAC如何查看图片尺寸大小
  16. MyBatis为什么这么“屌”?这些MyBatis的秘密,分分钟吊打面试官
  17. 程序员如何写好简历 一份优秀的程序员简历是什么样的?
  18. 获取各大电商平台、1688app上商品详情原数据API调用展示
  19. android自定义主题背景颜色,Android 自定义SeekBar 实现分段显示不同背景颜色的示例代码...
  20. 看完去怼面试官,Java尊享版性能调优分享给大家

热门文章

  1. Altium Designer-Net has no driving source解决办法
  2. websoc是什么可以卸载吗_函授可以考公务员吗?什么是函授?
  3. python接口测试实战_Python接口测试实战5(下) - RESTful、Web Service及Mock Server
  4. 前端常见知识点四之webscoket
  5. mat opencv java_OpenCV Mat到JavaCV Mat转换
  6. QAQorz的训练记录
  7. kafka概念使用简介注意点
  8. 开启tomcat的apr模式,并利用redis做tomcat7的session的共享。
  9. 用eclispe远程调试tomcat war包形式
  10. 步步为营-72-asp.net简单练习(通过webForm实现一些简单实例)