项目部署后程序自动运行

在携程程序中,我们经常会遇到要求能够在项目部署上线后能够定时执行,自动执行的要求。现在我就带大家写一个简单的定时器,改定时器可以实现项目部署在tomcat后便可以自动运行,无需执行其他任何操作。首先我们来了解一下编写的思路。

1、根据要求是要在tomcat启动的时候就执行,所以我们必须在web.xml中加入一个监听类。tomcat一启动监听类便自动执行。

如何实现这一监听类?我们需要实现ServletContextListener类来监听tomcat的启动,终止。这样就能实现监听类在tomcat启动的时候实现自动执行下面直接上代码。

package com.hongyu.utils;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

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

public class AutoRunTimerListener implements ServletContextListener {
	
	//当servlet容器终止web应用是会自动调用该方法。在调用改方法时会自动销户全部的servlet和filter
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("定时发送Xml信息监听--已关闭!");
	}

	//当servlet容器启动web应用是调用改方法,调用胡容器在初始化filter,并对需要被初始化的servlet和filter急性型初始化
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		// 指定的任务,从指定的延迟后,开始进行重复执行。	
		Calendar calendar = Calendar.getInstance();		
		int year = calendar.get(Calendar.YEAR);	
		int month = calendar.get(Calendar.MONTH);	
		int day = calendar.get(Calendar.DAY_OF_MONTH);
		/**		
		 *  定制每天的10:00:00执行,
		 * 若程序已超过10点启动,当天不再执行,
		 * 等到明日10点再执行		
		 *  *  这样保证了时间一直是10点,
		 *  而不会变成程序启动时间		 */		
		calendar.set(year, month, day, 10, 00, 00);	
		Date defaultdate =calendar.getTime();// 今天10点(默认发送时间)	
		Date sendDate =new Date();		// 10点后开机	
		//判断当前的时间是否大于10点,如果是则当天不再执行,如果不是则执行该程序
		if (defaultdate.before(new Date())) {	
			// 将发送时间设为明天10点			
			calendar.add(Calendar.DATE, 1);	
			sendDate = (Date) calendar.getTime();	
		}
		
		/**
		 * 使用java中自带的定时类。run方法中便是要定时执行的代码或者方法
		 * sTime.schedule(task, delay, period);
		 * task代表要执行的任务,delay表示要延迟执行的时间,period表示要定时执行的频率。
		 */ 
		Timer sTime=new Timer();
		
		sTime.schedule(new TimerTask() {
			@Override
			public void run() {
				//需要定时执行的代码写在此处
				System.out.println(new Date()+"我正在执行");
			}
		}, sendDate, 1000*60);
		
	}
	

}

编写监听类后,我们需要在web.xml中进行配置

 <listener>
    <listener-class>com.hongyu.utils.AutoRunTimerListener</listener-class>
  </listener>

执行的结果

以上的的简单的定时器实现了在判断一天的时间是否在10点钟之前,是则开始执行程序,不是则明日开始执行该程序。

猜你喜欢

转载自blog.csdn.net/weixin_42324471/article/details/82942262
今日推荐