一、概述:

最近维护一个老项目,里面使用的是Timer的时间调度器,以前没接触过,对着代码鼓捣了半天,查阅了部分博客,最后总结出自己的见解,新项目一般是不会用这种老掉牙的时间调度器了,但是维护老项目还是用的着的。就当笔记记录一下了,自己写的才是符合自己的思路走向的。有时间再补上Quartz调度器,这个才是现在使用最多的。

二、常用的三种调度器分类

Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。

使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂。

Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。

三、使用Spring体系来完成代码的搭建

1、代码结构:

                                  

2、springContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
default-lazy-init="true"> <!--定义了一个TimerFactoryBean类,并且把ScheduledTimerTask类的实例作为需要调度的task。-->
<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean" lazy-init="false">
<property name="scheduledTimerTasks">
<list>
<ref local="scheduledTask1"/>
<ref local="scheduledTask2"/>
</list>
</property>
</bean> <!--利用ScheduledTimerTask类来配置每个task的启动时间延时,每次启动之间的间隔,当然还有最重要的是需要运行那个对象,也就是MethodInvokingTimerTaskFactoryBean类的实例-->
<bean id="scheduledTask1" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="delay" value="0" />
<property name="period" value="1000" />
<property name="timerTask">
<ref bean="methodInvokingTask1"/>
</property>
</bean> <bean id="scheduledTask2" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="delay" value="0" />
<property name="period" value="1000" />
<property name="timerTask">
<ref bean="methodInvokingTask2"/>
</property>
</bean> <!--利用spring提供的MethodInvokingTimerTaskFactoryBean类来实现来实现对对task类和方法的声明,声明目标对象和方法,从而使spring知道要运行那个类的那个方法-->
<bean id="methodInvokingTask1" class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
<property name="targetObject" ref="myTask1"/>
<property name="targetMethod" value="run"/>
</bean> <bean id="methodInvokingTask2" class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
<property name="targetObject" ref="myTask2"/>
<property name="targetMethod" value="run"/>
</bean> <!--被指定自动任务的类对象-->
<bean id="myTask1" class="com.turtle.test.MyTask">
<property name="name" value="启动一"/>
</bean> <bean id="myTask2" class="com.turtle.test.MyTask_2">
<property name="name" value="启动二"/>
</bean> </beans>

3、MyTask文件

package com.turtle.test;

import java.util.TimerTask;

/**
* 自定义一个定时任务
* 推荐是继承自 TimerTask
*/
public class MyTask extends TimerTask { private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} private static int i = 0; // 使用线程中的方法 run
@Override
public void run() {
System.out.println("定时任务启动"+name+"----出现了"+i++);
}
}

4、MyTask_2文件

package com.turtle.test;

import java.util.TimerTask;

/**
* 自定义一个定时任务
* 推荐是继承自 TimerTask
*/
public class MyTask_2 extends TimerTask { private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} private static int i = 0; // 使用线程中的方法 run
@Override
public void run() {
System.out.println("定时任务启动"+name+"----出现了"+i++);
}
}

5、MyTestTask_Test_01

package com.turtle.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyTestTask_Test_01 {
public static void main(String[] args) {
// 启动测试
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springContext.xml");
}
}

6、结果:

                        

四、总结:

如果要使用TImer的调度器的话,推荐使用新的ScheduledExecutorService,这个目前没使用,就没进行代码验证了,推荐一博客,大概看了下,写得挺好的https://blog.csdn.net/wangmx1993328/article/details/80840598

自动任务调度 - Timer的更多相关文章

  1. oracle之三 自动任务调度

    Oracle 自动任务调度 13.1 Oracle任务调度概述 在Oracle中任务调度指某一(组)执行程序在特定的时间被周期性的执行.Oracle把任务调度称为job(作业). Advanced S ...

  2. java定时任务调度-Timer(1)

    一.定义 有且仅有一个后台线程对多个业务线程进行定时定频率的调度 二. Timer  ---->  Timer Task  (中有run();方法) 通过 new Timer().schedul ...

  3. java任务调度Timer简单例子

    1.创建类TimerTest import java.util.Timer; import java.util.TimerTask; public class TimerTest { private ...

  4. 自动化运维?看看Python怎样完成自动任务调度⛵

    作者:韩信子@ShowMeAI Python3◉技能提升系列:https://www.showmeai.tech/tutorials/56 本文地址:https://www.showmeai.tech ...

  5. SpringMvc自动任务调度之task实现项目源码,@Scheduled

    1.Xml配置 Spring-job.xml 并在 Spring-Application.xml中Import <?xml version="1.0" encoding=&q ...

  6. 几种任务调度的 Java 实现方法与比较Timer,ScheduledExecutor,Quartz,JCronTab

    几种任务调度的 Java 实现方法与比较 综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quar ...

  7. 几种任务调度的 Java 实现方法与比较

    综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺 ...

  8. java18 任务调度

    任务调度; Timer类, /** 了解 Timer() schedule(TimerTask task, Date time) schedule(TimerTask task, Date first ...

  9. 几种任务调度的 Java 实现方法与比较--转载

    前言 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务.本文由浅入深介绍四种任务调度的 Java 实现: Timer ScheduledExecutor 开源工具包 Quartz ...

随机推荐

  1. centos7版本以上root密码破解

    centos7版本以上root密码破解 主讲内容: 1.centos7版本以上root密码破解   一.centos7版本以上root密码破解 重启服务器,按键盘的方向键(上 下) 按e 进入紧急救援 ...

  2. B-概率论-贝叶斯决策

    目录 贝叶斯决策 一.贝叶斯决策理论 二.贝叶斯公式 2.1 从条件概率公式推导贝叶斯公式 2.2 从全概率公式推导贝叶斯公式 三.贝叶斯公式应用 更新.更全的<机器学习>的更新网站,更有 ...

  3. Win10安装虚拟机 + Ubuntu

    近期需要利用虚拟机,同时在虚拟机中安装Ubuntu系统.整理安装过程,供今后学习参考. 虚拟机安装包:VMware-workstation-full-12.1.0 链接:https://pan.bai ...

  4. MYSQL中HEX、UNHEX函数

    HEX()函数:返回十六进制值的字符串表示形式.注意:并不是十进制转化为十六进制数,而是转化为字符串... UNHEX() 函数: 每对十六进制数字转化为一个字符. 下面是HEX()几个简单的例子: ...

  5. css 文字间距

    letter-spacing :  字与字之间的距离 text-indent : 行的抬头间距 line-height : 行高度

  6. Python开发【第四篇】语句与函数

    语句 statement 语句是由一些表达式组成,通常一条语句可以独立的执行来完成一部分事情,并且形成结果. 多条语句写在一行内要用分号分开 例子: print('hello world') #这是一 ...

  7. Halcon一日一练:图像分割之阈值分割1

    先了解什么是阈值,度娘告诉我的是:一个领域或一个系统的界限称为阈,其数值称为阈值.在图像中,我们把图像看成一个由像素灰度值组成的数集,那么阈,就是这个图像中,根据目标与背景灰度值的差异,选取的一个合适 ...

  8. asp.net core mvc中自定义ActionResult

    在GitHub上有个项目,本来是作为自己研究学习.net core的Demo,没想到很多同学在看,还给了很多星,所以觉得应该升成3.0,整理一下,写成博分享给学习.net core的同学们. 项目名称 ...

  9. python学习-并发编程(十四)

    14.2线程的创建与启动 import threading # 定义一个普通的action函数,该函数准备作为线程执行体 def action(max): for i in range(max): p ...

  10. 20.discuz论坛-实现伪静态

    部署discuz论坛 1.直接上配置文件--->>> [root@web01 conf.d]# vim discuz.cheng.com.conf server { listen 8 ...