Java每天定时执行任务

合集下载

java 编写定时器实例 每天定时执行和N分钟执行一次

java 编写定时器实例 每天定时执行和N分钟执行一次

Java定时器的使用,这里简单的说两种使用方式。

在这里我用的是线程,可以单独启动。

仅供参考!第一种:要求程序定时执行某个方法,如:没5分钟扫描数据库tb_test表package com.jwht.hbgs.datatransfer;import java.io.IOException;/*** <p>Title: </p>* <p>Description: </p>* <p>Copyright: Copyright (c) 2005</p>* <p>Company: </p>* @author ASLU* @version 1.0*/public class TsMGap {public TsMGap() {}public void go() throws IOException{ThreadTimer th=new ThreadTimer();th.start();//线程启动}public static void main(String[] args) { TsMGap tm = new TsMGap();try{tm.go();}catch(Exception e){e.printStackTrace();}}}package com.jwht.hbgs.datatransfer;import java.util.*;/*** <p>Title: </p>* <p>Description: </p>* <p>Copyright: Copyright (c) 2005</p>* <p>Company: </p>* @author ASLU* @version 1.0*/public class ThreadTimer extends Thread{public ThreadTimer() {}static int num=5;//分钟public void start(){//每5分钟执行一次定时任务RefreshItem ri = new RefreshItem(60*ThreadTimer.num);}public static void main(String [] args){ThreadTimer tm = new ThreadTimer();tm.start();//启动ThreadTimer中start()方法。

JAVA定时执行任务(Tomcat下的定时任务)

JAVA定时执行任务(Tomcat下的定时任务)

JAVA定时执行任务(Tomcat下的定时任务)Tomcat 下的定时任务SysContextListener.javapackage axtic.servlet;import java.util.Timer;//定时器类import axtic.bean.exportHistoryBean;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class SysContextListener implements ServletContextL istener{private Timer timer = null;public void contextInitialized(ServletContextEvent event){//在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能timer = new Timer(true);event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到timer.schedule(new exportHistoryBean(event.getServletCon text()),0,5*1000);//调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时。

event.getServletContext().log("已经添加任务");}public void contextDestroyed(ServletContextEvent event){//在这里关闭监听器,所以在这里销毁定时器。

timer.cancel();event.getServletContext().log("定时器销毁");}}接下来可以编写自己的功能类,此类一定要extends定时器类中TimerTaskexportHistoryBean.javapackage axtic.bean;import java.util.Calendar;import java.util.TimerTask;import javax.servlet.ServletContext;public class exportHistoryBean extends TimerTask{private static final int C_SCHEDULE_HOUR = 0;private static boolean isRunning = false;private ServletContext context = null;public exportHistoryBean(ServletContext context){this.context = context;}public void run(){Calendar c = Calendar.getInstance();if(!isRunning){if(C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY)){isRunning = true;context.log("开始执行指定任务");//-------------------开始保存当日历史记录//在这里编写自己的功能,例://File file = new File("temp");//file.mkdir();//启动tomcat,可以发现在tomcat根目录下,会自动创建temp文件夹//-------------------结束isRunning = false;context.log("指定任务执行结束");}else{context.log("上一次任务执行还未结束");}}}}Servlet侦听器结合Java定时器实现任务计划调度好多朋友用过Windows的任务计划,也有不少程序迷自己曾写过时钟报警、系统自动关机等趣味程序,可却很少有朋友在Web工程中实现过类似功能。

java中零点十分定时任务表达式

java中零点十分定时任务表达式

标题:深度探讨Java中的零点十分定时任务表达式一、引言在Java开发中,定时任务的使用频率非常高,而零点十分定时任务表达式更是常见的一种。

在本文中,我将从简单介绍零点十分定时任务表达式的基本概念开始,逐步深入探讨其用法、原理和注意事项,以帮助您更深入地理解和灵活运用这一常见的定时任务表达式。

二、什么是零点十分定时任务表达式?零点十分定时任务表达式是指一种用于在Java中进行定时任务调度的表达式格式。

在这种表达式中,我们可以指定小时、分钟、秒等时间单位,以便精确地控制定时任务的执行时间。

三、零点十分定时任务表达式的基本结构在Java中,零点十分定时任务表达式由6个字段组成,分别表示秒、分、时、日、月、周几。

其中,秒、分、时这三个字段用于表示时间,而日、月、周几这三个字段用于表示日期。

具体格式如下:秒(0-59)分(0-59)时(0-23)日(1-31)月(1-12)周几(0-7)其中,每个字段都可以设置为一个具体的值,多个值之间用逗号隔开;也可以使用“*”代表该字段的所有取值,使用“-”表示范围,使用“/”表示步长等。

以零点十分定时任务为例,要表示每天的零点十分执行一次任务的表达式为:```0 10 0 * * ?```四、零点十分定时任务表达式的高级用法除了基本的表示方式外,零点十分定时任务表达式还支持一些高级的用法,例如:- 使用“/”表示间隔时间。

“0 0/5 * * * ?”表示每隔5分钟执行一次任务。

- 使用“?”表示不指定具体的值。

在日、月、周几中,可以使用“?”来表示不指定具体的值,表示任意值都可以匹配。

五、零点十分定时任务表达式的注意事项在使用零点十分定时任务表达式时,需要注意以下几点:- 应谨慎设置秒、分、时,避免产生不必要的执行次数。

- 需要考虑定时任务的并发执行情况,避免出现多个任务同时执行的情况。

- 需要充分测试表达式的正确性和可靠性,在生产环境中谨慎调整定时任务的执行时间。

Java定时任务的三种实现方式

Java定时任务的三种实现方式

Java定时任务的三种实现⽅式前⾔现代的应⽤程序早已不是以前的那些由简单的增删改查拼凑⽽成的程序了,⾼复杂性早已是标配,⽽任务的定时调度与执⾏也是对程序的基本要求了。

很多业务需求的实现都离不开定时任务,例如,每⽉⼀号,移动将清空你上⽉未⽤完流量,重置套餐流量,以及备忘录提醒、闹钟等功能。

Java 系统中主要有三种⽅式来实现定时任务:Timer和TimerTaskScheduledExecutorService三⽅框架 Quartz下⾯我们⼀个个来看。

1> Timer和TimerTask先看⼀个⼩ demo,接着我们再来分析其中原理:这种⽅式的定时任务主要⽤到两个类,Timer 和 TimerTask。

其中,TimerTask 继承接⼝ Runnable,抽象的描述⼀种任务类型,我们只要重写实现它的 run ⽅法就可以实现⾃定义任务。

⽽ Timer 就是⽤于定时任务调度的核⼼类,demo 中我们调⽤其 schedule 并指定延时 1000 毫秒,所以上述代码会在⼀秒钟后完成打印操作,接着程序结束。

那么,使⽤上很简单,两个步骤即可,但是其中的实现逻辑是怎样的呢?Timer 接⼝⾸先,Timer 接⼝中,这两个字段是⾮常核⼼重要的:TaskQueue 是⼀个队列,内部由动态数组实现的最⼩堆结构,换句话说,它是⼀个优先级队列。

⽽优先级参考下⼀次执⾏时间,越快执⾏的越排在前⾯,这⼀点我们回头再研究。

接着,这个 TimerThread 类其实是 Timer 的⼀个内部类,它继承了 Thread 并重写了其 run ⽅法,该线程实例将在构建 Timer 实例的时候被启动。

run ⽅法内部会循环的从队列中取任务,如果没有就阻塞⾃⼰,⽽当我们成功的向队列中添加了定时任务,也会尝试唤醒该线程。

我们也来看⼀下 Timer 的构造⽅法:public Timer(String name) {thread.setName(name);thread.start();}再简单不过的构造函数了,为内部线程设置线程名,并启动该线程。

java中实现定时任务的常用方式,以及差异和注意事项。

java中实现定时任务的常用方式,以及差异和注意事项。

java中实现定时任务的常用方式,以及差异和注意事项。

1.Timer类:Timer类是Java中最基本的定时任务类,它可以在指定时间后执行一次或定时重复执行任务。

2. ScheduledExecutorService接口:ScheduledExecutorService是Java 5中新增的定时任务接口,它可以实现更灵活、更可控、更安全的定时任务。

3. Quartz框架:Quartz是一个优秀的任务调度框架,它提供了很多高级功能,比如任务分组、任务优先级、任务依赖关系等。

不同的方式实现定时任务的差异在于可定制性、稳定性、可靠性等方面。

Timer类虽然简单易用,但不够灵活,容易出现线程安全问题;而ScheduledExecutorService虽然性能更好、更安全,但也有其局限性,比如无法处理复杂的任务依赖关系。

Quartz框架则是一个功能强大的工具,但也需要花费一些学习成本。

在使用定时任务时,需注意以下事项:
1. 必须定义任务执行的频率、时间和处理逻辑。

2. 需要考虑任务对系统性能的影响,比如任务执行时间过长可能会导致系统卡顿。

3. 需要考虑任务的并发性,尤其是在多线程环境下。

4. 需要合理地使用线程池和锁,以确保任务执行的可靠性和线程安全性。

总之,在实现定时任务时,需要根据具体需求选择合适的方案,并注意任务的可定制性、稳定性、可靠性等方面的问题。

java定时任务原理 -回复

java定时任务原理 -回复

java定时任务原理-回复Java定时任务原理Java定时任务是指在指定的时间间隔内自动执行某些任务或代码的机制。

这种机制可以用于定期更新数据、发送邮件、生成报表等各种自动化任务。

本文将从定时任务的概念、实现方式、原理以及应用场景等方面进行详细介绍。

一、定时任务的概念定时任务是指按照一定时间间隔或特定时间点自动触发执行的任务。

这些任务可以在后台执行,不依赖于用户的操作,可以实现多个任务的同时执行,提高效率和准确性。

二、定时任务的实现方式Java中有多种方式可以实现定时任务,其中最常用的有Timer类和ScheduledExecutorService接口。

1. Timer类Timer类是Java中最早提供的定时任务实现方式之一。

通过Timer类,可以在指定的时间间隔内重复执行某个任务或在特定时间点执行某个任务。

使用Timer类实现定时任务的步骤如下:a. 创建Timer对象,通过该对象可以创建定时任务。

b. 创建一个继承自TimerTask的类,该类中包含了具体的任务内容。

c. 调用Timer对象的schedule方法,指定任务和执行间隔等参数,将任务添加到Timer的任务队列中。

d. Timer对象会根据指定的时间间隔自动触发任务的执行。

Timer类的局限是任务执行不可靠,如果一个任务的执行时间超过了下一次任务的执行时间,会导致任务延迟执行。

此外,Timer类不支持多线程执行任务,当一个任务的执行时间过长时,会影响其他任务的运行。

2. ScheduledExecutorService接口Java 5引入了ScheduledExecutorService接口,提供了更为强大和灵活的定时任务操作方式。

ScheduledExecutorService接口可以创建线程池,支持多线程执行定时任务,并提供了更可靠和准确的任务执行。

使用ScheduledExecutorService接口实现定时任务的步骤如下:a. 创建ScheduledExecutorService对象,通过该对象可以创建线程池和定时任务。

java中定时任务的写法

java中定时任务的写法

java中定时任务的写法在Java中,可以使用以下几种方法来实现定时任务:1.使用Timer类Timer类提供了一种简单的方法来创建定时任务。

Timer类的构造方法有两个参数:一个是时钟源,另一个是任务执行器。

时钟源用于指定任务执行的时间,任务执行器用于执行任务。

以下是使用Timer类创建定时任务的示例:import java.util.Timer;import java.util.TimerTask;public class TimerExample{public static void main(String[]args){创建一个定时器Timer timer=new Timer();创建一个任务TimerTask task=new TimerTask(){Overridepublic void run(){System.out.println("Hello,world!");}};安排任务在5秒后执行timer.schedule(task,5000);}}输出结果:Hello,world!2.使用ScheduledExecutorService类ScheduledExecutorService类提供了一种更灵活的方法来创建定时任务。

ScheduledExecutorService类的构造方法有两个参数:一个是核心线程数,另一个是最大线程数。

核心线程数是指在空闲时不被回收的线程数,最大线程数是指允许创建的最大线程数。

以下是使用ScheduledExecutorService类创建定时任务的示例:import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class ScheduledExecutorServiceExample{public static void main(String[]args){创建一个定时执行器ScheduledExecutorServiceexecutorService=Executors.newScheduledThreadPool(1);创建一个任务Runnable task=()->System.out.println("Hello,world!");安排任务在5秒后执行executorService.schedule(task,5,TimeUnit.SECONDS);}}输出结果:Hello,world!3.使用cron表达式使用cron表达式可以指定任务的执行时间。

java 定时任务实现方法

java 定时任务实现方法

Java中实现定时任务的方法有多种,其中最常用的有三种:
1.使用java.util.Timer类和java.util.TimerTask类:
Timer类是用于安排一次性的任务,而TimerTask类则定义了任务的行为。

可以使用Timer的schedule()方法安排TimerTask,可以在指定时间后运行或者以固定时间间隔重复运行。

2.使用ScheduledExecutorService:
ScheduledExecutorService是Java 5及以上版本中提供的一个更强大、更灵活的定时任务调度器。

它提供了schedule()和scheduleAtFixedRate()方法来安排任务,支持在指定时间后运行以及固定时间间隔重复运行。

3.使用Spring框架中的@Scheduled注解:
如果是在Spring应用中实现定时任务,可以使用@Scheduled注解。

该注解可以标注在方法上,表示该方法应该按照指定的计划执行。

可以通过设置
cron表达式或者固定延迟时间来指定任务的执行计划。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java每天定时执行任务
java定时任务,每天定时执行任务。

以下是这个例子的全部代码。

public class TimerManager {
//时间间隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
public TimerManager() {
Calendar calendar = Calendar.getInstance();
/*** 定制每日2:00执行方法***/
calendar.set(Calendar.HOUR_OF_DAY, 2);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date=calendar.getTime(); //第一次执行定时任务的时间
//如果第一次执行定时任务的时间小于当前的时间
//此时要在第一次执行定时任务的时间加一天,以便此任务在下个时间点执行。

如果不加一天,任务会立即执行。

if (date.before(new Date())) {
date = this.addDay(date, 1);
}
Timer timer = new Timer();
NFDFlightDataTimerT ask task = new NFDFlightDataTimerTask();
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。

timer.schedule(task,date,PERIOD_DAY);
}
// 增加或减少天数
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
}
在TimerManager 这个类里面,大家一定要注意时间点的问题。

如果你设定在凌晨2点执行任务。

但你是在2点以后
发布的程序或是重启过服务,那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点执行。

为了,避免这种情况
发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加一天。

public class NFDFlightDataTimerTask extends TimerTask {
private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
@Override
public void run() {
try {
//在这里写你要执行的内容
} catch (Exception e) {
("-------------解析信息发生异常--------------");
}
}
}
public class NFDFlightDataTaskListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
new TimerManager();
}
public void contextDestroyed(ServletContextEvent event) {
}
}
然后要在web.xml里面配置监听器
<listener>
<listener-class>
com.listener.NFDFlightDataTaskListener
</listener-class>
</listener>。

相关文档
最新文档