首页 > 编程语言 >JAVA规定时间循环定时执行某个任务

JAVA规定时间循环定时执行某个任务

时间:2022-11-30 15:37:49浏览次数:34  
标签:JAVA Calendar timer util Date cal 某个 定时 public


在我们做web项目的时候有些需求需要我们定时每周每天执行什么任务,这里给大家介绍一种方式,我就直接贴代码

web.xml

<listener>
<listener-class>com.hw.util.BeginRun</listener-class>
</listener>
public class BeginRun implements ServletContextListener {
java.util.Timer timer = Time.getSingle();

//启动执行
public void contextInitialized(ServletContextEvent event) {
timer = new java.util.Timer(true);
//设置时间格式
try {
//设置从此刻时间开始 建议设置未来时间,不然项目启动的话就会先执行一次
DateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
Date date2 = getThisWeekMonday(date);//获取下星期6的时间
if (date.getTime() >= date2.getTime()) {//如果当前时间不小于周六的时间,
Calendar cal = Calendar.getInstance();
cal.setTime(date2);
cal.add(Calendar.WEEK_OF_MONTH, +1);//周数加一
date2 = cal.getTime();
}
// date2 = dateFormat2. parse("2018-11-28 22:58:00");
//第二个参数为从这个时间开始,第三个参数为间隔的时间,NFDFlightDataTimerTask为执行具体方法的类
timer.scheduleAtFixedRate(new NFDFlightDataTimerTask(event.getServletContext()), date2, 60 * 60 * 24 * 7 * 1000);
} catch (Exception e) {
e.printStackTrace();
}
}

//销毁执行的方法
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
System.out.println("*************定时器销毁");
event.getServletContext().log("定时器销毁");
}

/**
* @Description: 获取下周星期6的方法
* @Param: [date]
* @return: java.util.Date
* @Author: hw
* @Date: 2018/11/28
*/
public static Date getThisWeekMonday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 获得当前日期是一个星期的第几天
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
cal.set(Calendar.HOUR_OF_DAY, 02);
cal.set(Calendar.MINUTE, 00);
cal.set(Calendar.SECOND, 00);
// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期6
cal.setFirstDayOfWeek(Calendar.SATURDAY);
// 获得当前日期是一个星期的第几天
int day = cal.get(Calendar.DAY_OF_WEEK);
// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
return cal.getTime();
}

}

class Time {
private Time() {
}

private static java.util.Timer timer = null;

public static java.util.Timer getSingle() {
if (timer == null) {
timer = new java.util.Timer();
}
return timer;
}
}

NFDFlightDataTimerTask类

public class NFDFlightDataTimerTask extends TimerTask {

private ServletContext context = null;
public NFDFlightDataTimerTask(ServletContext context) {
this.context = context;
}
/**
* @Description: 执行的方法
* @Param: []
* @return: void
* @Author: hw
* @Date: 2018/11/25
*/
public void run() {

}

 

标签:JAVA,Calendar,timer,util,Date,cal,某个,定时,public
From: https://blog.51cto.com/u_15897407/5899815

相关文章

  • [JavaScript] 自顶向下学习如何手写promise
    引子去年写了一篇有关promise的手写文章,写到一半发现自己的理解还不是很透彻,写的很烂,今年卷土重来,实现部分采用功能分解,目录跳转的形式呈现,力求最通俗易懂得剖析promise,我......
  • Java生成帮助文档
    在要生成帮助文档的目录下打开cmd   输入javadoc-encodingUTF-8-charrsetUTF-8要生成的Java文件  在生成的文件中打开index.html......
  • Java基础
    注释平时我们编写代码,在代码量很少时,我们还可以看懂自己写的,但当项目结构一旦复杂起来,我们就需要用到注释了注释并不会被执行,是给我们写代码的人看的书写注释是......
  • Java基础----内部类
    内部类分为1.成员内部类2.静态内部类3.局部内部类4.匿名内部类内部类概念:在一个类的内部再定义一个类特点:编译之后可以独立生成独立的字节码文件内部类可以......
  • java并发编程(二十二)-并发安全的基本概念
    类的线程安全定义  如果多线程下使用这个类,不过多线程如何使用和调度这个类,这个类总是表示出正确的行为,这个类就是线程安全的。类的线程安全表现为:操作的原子性内存的可见......
  • java并发编程(二十三)-并发安全之死锁
    死锁资源一定是多于1个,同时小于等于竞争的线程数,资源只有一个,只会产生激烈的竞争。死锁的根本成因:获取锁的顺序不一致导致。 死锁的一般情况:packagecom.caojiulu;importc......
  • 获取指定URL中的某个参数(工具类)
    直接贴代码吧publicclassURLUtils{/***获取指定url中的某个参数**@paramurl*@paramname*@return*/publicstaticStringg......
  • java并发编程(一)-线程相关的基本概念
    CPU核心数和线程数的关系核心数:线程数=1:1intel引入超线程技术之后--》核心数:线程数=1:2CPU时间片轮转机制-又称RR调度 时间片轮转法(Round-Robin,RR)主要用于分时系统......
  • java并发编程(三)-线程的协作式
    怎么样才能让Java里的线程安全停止工作呢?一般来说:程序执行完或者抛出异常。怎么用代码的方式将线程停止呢?可以看到stop(),resume(),suspend()已不建议使用,stop()会导致线程......
  • 【JAVA基础】SQL示例
    SQL示例insert操作<!--id属性:表示映射的接口中方法的名称,直接标签的内容部来编写SQL语句--><!--useGeneratedKeys="true"表示开启某个字段的值递增(大部分都是......