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里边的时刻到底是怎样算的,说实话~我也没学会。可是你能够去查找一下!!!我在这儿贴出几个简略的比如,咱们假如领悟好的,能够测验自己悟一会儿!!!