定时器怎么使用

控制/MCU

1877人已加入

描述

java中定时器的简单使用

1.首先肯定是容器一启动就要启动定时器,所以我们可以选择把定时器写在一个监听器里,容器一启动所以监听器也就跟着启动,然后定时器就可以工作了。

第一步,把自己写的监听器加到web.xml中;

第二步,写一个监听器,实现ServletContextListener接口;

第三步,写一个定时器,继承TimerTask,在复写的run()方法里写具体的业务逻辑。

第四步,在自己的监听器里复写的

public void contextInitialized(ServletContextEvent arg0){

}

这个方法里调用定时器的schedule方法。

具体代码如下:

web.xml添加:

1 《!-- 用于补偿认证信息异常的数据,用来启动定时器,20170505 --》

2 《listener》

3 《listener-class》com.dcits.app.servlet.MyTimerTaskListener《/listener-class》

4 《/listener》

MyTimerTaskListener.java

package com.dcits.app.servlet;

import java.util.Calendar;

import java.util.Timer;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

/**

* @author Weiyongle

* @time 2017-5-5 下午2:05:32

*/

public class MyTimerTaskListener implements ServletContextListener {

private Timer timer = null;

@Override

public void contextDestroyed(ServletContextEvent arg0) {

timer.cancel();

}

@Override

public void contextInitialized(ServletContextEvent arg0) {

System.out.println(“-----开始启动定时器------”);

Calendar twentyOne = Calendar.getInstance();

twentyOne.set(Calendar.HOUR_OF_DAY, 23);

twentyOne.set(Calendar.MINUTE, 0);

twentyOne.set(Calendar.SECOND, 0);

timer = new Timer(true);

//第一次是晚上23点执行,间隔24小时执行一次

timer.schedule(new MyTimerTask(), twentyOne.getTime(), 1000*60*60*24);

/*System.out.println(“-----开始启动定时器------”);

Calendar twentyOne = Calendar.getInstance();

twentyOne.set(Calendar.HOUR_OF_DAY, 14);

twentyOne.set(Calendar.MINUTE, 47);

twentyOne.set(Calendar.SECOND, 0);

timer = new Timer(true);

timer.schedule(new MyTimerTask(), twentyOne.getTime(), 1000*10);*/

}

}

MyTimerTask.java

package com.dcits.app.servlet;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

import java.util.TimerTask;

import org.codehaus.jackson.JsonGenerationException;

import org.codehaus.jackson.map.JsonMappingException;

/**

* 定时器,用于补偿认证的时候没有获取到正常返回的那些数据

* @author Weiyongle

* @time 2017-5-5 下午2:20:12

*/

public class MyTimerTask extends TimerTask{

private static StringBuffer url = new StringBuffer();

@Override

public void run() {

//生产环境

// url.append(“https://我是具体的ip地址/nmsypt/servlet/webServlet”);//生产环境

url.append(“http://localhost:8080/adp/servlet/webServlet”);//本地环境

Map《String,Object》 reqMap = new HashMap《String,Object》();

//这里的map从数据库里获取对应的数据不写死就行了,先获取map,在写个for循环进行循环就行了

reqMap.put(“QYMC”,“丹同学的公司”);

reqMap.put(“NSRSBH”,“158028307441234”);

reqMap.put(“SJHM_FR”,“15802830744”);

reqMap.put(“YZM”,“123456”);

reqMap.put(“CWFZR”,“”);//

reqMap.put(“ZJLX_DM_CW”,“”);//

reqMap.put(“ZJHM_CW”,“”);//

reqMap.put(“ZGRS”,“1234”);

reqMap.put(“SQYY”,“”);//

reqMap.put(“JRCPBM”,“00002”);

reqMap.put(“XYDM”,“1”);

reqMap.put(“XZQHDM”,“”);

reqMap.put(“QYBM”,“QY17900000647001”);

try {

CompensateData.CompensateDatas(url.toString(), reqMap);

System.out.println(“-----成功补偿了一条认证信息------”);

} catch (JsonGenerationException e) {

e.printStackTrace();

} catch (JsonMappingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

java当中的定时器的4种使用方式

对于开发游戏项目的同胞来说,Timer 这个东西肯定不会陌生,今天对以前自己经常使用的定时进行了一番小小的总结!没有写具体实现的原理,只是列举出了其中的四种比较常见的使用方法,相对而言,所以只要按照其所列举的例子仿照即可!

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

public class TimeTest {

public static void main(String[] args) {

timer1();

//timer2();

//timer3();

//timer4();

}

// 第一种方法:设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time)

public static void timer1() {

Timer timer = new Timer();

timer.schedule(new TimerTask() {

public void run() {

System.out.println(“-------设定要指定任务--------”);

}

}, 2000);// 设定指定的时间time,此处为2000毫秒

}

// 第二种方法:设定指定任务task在指定延迟delay后进行固定延迟peroid的执行

// schedule(TimerTask task, long delay, long period)

public static void timer2() {

Timer timer = new Timer();

timer.schedule(new TimerTask() {

public void run() {

System.out.println(“-------设定要指定任务--------”);

}

}, 1000, 5000);

}

// 第三种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行。

// scheduleAtFixedRate(TimerTask task, long delay, long period)

public static void timer3() {

Timer timer = new Timer();

timer.scheduleAtFixedRate(new TimerTask() {

public void run() {

System.out.println(“-------设定要指定任务--------”);

}

}, 1000, 2000);

}

// 第四种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行.

// Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)

public static void timer4() {

Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制时

calendar.set(Calendar.MINUTE, 0); // 控制分

calendar.set(Calendar.SECOND, 0); // 控制秒

Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00

Timer timer = new Timer();

timer.scheduleAtFixedRate(new TimerTask() {

public void run() {

System.out.println(“-------设定要指定任务--------”);

}

}, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行

}

}

Spring定时器应该怎么用呢?

在Java中呢,我们总是会有一些定时任务,比如说:发邮件、短信推送消息;发公告、更新等等。那么Spring中的定时器应该如何使用呢?接下来我们就来说说Spring定时器的使用方法。

1.我们今天呢,是以springboot项目为基础进行的,大家如果不会使用Springboot的话可以先收藏一下,明天我会出一个Springboot项目的搭建文章。到时候你可以返回来再看这篇。因为springboot实在是在方便了,用完之后就不想再回去写配置文件了。。。

2.首先呢,我们需要在启动主程序中开启定时,只需要在主类上增加@EnableScheduling即可,相信大家看字面意思也明白是什么意思啦!

3.接下来就是写我们的定时类,那么你就可以在定时类中完成自己的需求,无论是发送邮件、短信;还是公告、更新,他统统可以准确无误的帮你执行,如果你有兴趣,也可以写一个抢购物品呀、车票呀什么的脚本。当然说起来,写脚本可能python更强一些。

4.在以上代码中呢,我使用 @Autowired注入了testService,为的是告诉大家,使用@Component的类同Controller、Service一样,可以使用自动注入。

5.定时方法上方@Scheduled(cron = “0 0/1 * * * ?”)代表每分钟执行一次方法。testService中的方法仅仅是return了一个“you can you up!!!”字符串。我就不把代码贴出来。

6.大家可能很迷惑@Scheduled里面的时间到底是怎么算的,说实话~我也没学会。但是你可以去搜索一下!!!我在这里贴出几个简单的例子,大家如果悟性好的,可以尝试自己悟一下子!!!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分