JAVA定时执行任务,每天定时几点钟执行任务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA定时执行任务,每天定时几点钟执行任务相关的知识,希望对你有一定的参考价值。

案例: 你想让他几点执行都ok

1.MyJob02
//首先我们需要定义一个任务类,比如为MyJob02 ,
//该类需要继承Job类,然后添加execute(JobExecutionContext context)方法,在
//这个方法中就是我们具体的任务执行的地方。
//由希望由调度程序执行的组件实现的接口
public class MyJob02 implements Job

@Override
public void execute(JobExecutionContext context) throws JobExecutionException
// TODO Auto-generated method stub
// 执行响应的任务.

System.out.println("HelloJob.execute,"+new Date());

2.
public static void main(String[] args) throws Exception
//SchedulerFactory 是一个接口,用于Scheduler的创建和管理
SchedulerFactory factory = new StdSchedulerFactory();
//从工厂里面拿到一个scheduler实例
//计划表(可能翻译的不太贴切),现在我们有了要做的内容,
//与调度程序交互的主要API
/*
* Scheduler的生命期,从SchedulerFactory创建它时开始,
到Scheduler调用shutdown()方法时结束;Scheduler被创建后,
可以增加、删除和列举Job和Trigger,以及执行其它与调度相关的操作
(如暂停Trigger)。但是,Scheduler只有在调用start()方法后,
才会真正地触发trigger(即执行job)
*/
Scheduler scheduler = factory.getScheduler();
//具体任务.
//用于定义作业的实例
//JobBuilder - 用于定义/构建JobDetail实例,用于定义作业的实例。
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();

//Trigger(即触发器) - 定义执行给定作业的计划的组件
//TriggerBuilder - 用于定义/构建触发器实例
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0/1 * * * * ?")).build();
scheduler.scheduleJob(job, trigger);
scheduler.start();

参考技术A JAVA定时执行任务,每天定时几点钟执行任务的示例如下:
1.建立TimerManage类,设置时间点,时间点设置的管理类,代码如下:
package com.pcitc.time;

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;

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();

NFDFlightDataTimerTask 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点执行。为了,避免这种情况发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加一天。
2.建立NFDFlightDataTimerTask类,调用业务代码的类放在该类的run方法里面执行。
package com.pcitc.time;

import java.util.TimerTask;

import com.sun.istack.internal.logging.Logger;

public class NFDFlightDataTimerTask extends TimerTask

private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);

@Override
public void run()
try
// 在这里写你要执行的内容
System.out.println("功能方法写在这里了...");
catch (Exception e)
log.info("-------------解析信息发生异常--------------");



3.在web容器中使用的话,可以配置上下文监听器,使容器在启动的时候加载该监听器,代码如下:
package com.pcitc.time;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class NFDFlightDataTaskListener implements ServletContextListener

public void contextInitialized(ServletContextEvent event)
new TimerManager();


public void contextDestroyed(ServletContextEvent event)



4.在web.xml里面配置监听器
<listener>
<listener-class>
com.pcitc.time.NFDFlightDataTaskListener </listener-class></listener>

以上是关于JAVA定时执行任务,每天定时几点钟执行任务的主要内容,如果未能解决你的问题,请参考以下文章

[Linux之crond计划任务定时任务]

java怎么让程序每天晚上12点做定时任务,因为程序是不定时开的,所以要实时监听系统时间。

Java实现每天定时执行任务

Spring定时任务为啥没有执行

java定时任务的定时表达式,每天早晨6:30执行任务,还有一个是每个月的1号和15号执行任务

使用spring的定时任务时遇到重复执行