一、概述:

最近维护一个老项目,里面使用的是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. 编译安装msyql

    环境: ubuntu18.04.2 mysql5.7.21 #创建mysql属组 groupadd mysql useradd -g mysql mysql #查看属组 tail /etc/passw ...

  2. 并发新构件之CyclicBarrier

    CyclicBarrier:叫做循环栅栏,名字挺好听的.JDK描述:允许一组线程全部等待彼此达到共同屏障点的同步辅助. 循环阻塞在涉及固定大小的线程方的程序中很有用,这些线程必须偶尔等待彼此. 屏障被 ...

  3. Java集合框架,你了解多少?相信你看了这篇汇总一目了然!

    相信大多数的程序员都知道,Dictionary.Vertor.Stack和Properties这些类被用来存储和操作对象组.但是他们缺少一个核心的主题的. 集合框架设计成要满足以下的几个目标 第一条: ...

  4. mac下编译openjdk8?so easy!

    写在最前面的话:建议第一次编译jdk的朋友,查阅任何博客都不如认真读一遍源码中的README-builds.html 环境:macOS High Sierra(10.13.5) 编译jdk:openj ...

  5. VPS虚拟专用服务器

    目录   0x00 VPS服务器概述 0x01 VPS工作原理 0x02 VPS用途 0x03 VPS优势 0x04 VPS特点 0x00 VPS服务器概述 VPS服务器(虚拟专用服务器)(" ...

  6. php代码Xdebug调试使用笔记

    0x01 Xdebug简介 Xdebug是一个开放源代码的PHP程序调试器 运行流程: 0x02  Xdebug配置 日志 xdebug.trace_output_dir: 日志追踪输出目录 xdeb ...

  7. C++ Web框架::cintara

    1.Cinatra是由C++开源社区purecpp发起的一个开源项目,是一个现代C++写的Web框架,旨在给用户提供一个易用.灵活和高性能的Web框架,让用户能完全专注于核心逻辑而无需关注http细节 ...

  8. 定制的print()输出格式

    #定制print时的显示内容 #烤地瓜案例:主要显示格式digua("cd1","cd2","cd3""),而不是就直接在一个列表 ...

  9. 如何在 Creator3D 中切换模型贴图,超级简单!

    效果预览 前两天有伙伴在 QQ 上询问,如何在 Creator 3D 中切换模型贴图.Shawn 之前也没尝试过,不过根据之前 Cocos Creator 的经验以及这几天对 Creator 3D 的 ...

  10. 学习Spring的思考框架

    引子 很早之前听同事说:“要开会了.我都知道领导要问什么,就那几板斧.”其实领导之所以为领导,人家问的问题确实很合情合理,甚至可以说一针见血.而之所以能问出来这些合理的问题,就是因为头脑中有自己的思考 ...