启动tomcat服务器自动执行一个方法

第一步:配置web.xml文件

添加如下代码

<servlet>
    <servlet-name>Timer</servlet-name>
        <servlet-class>com.ccpit.p4.dispatch.web.Timer</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>    

第二步:创建一个类,名称为Timer(与web.xml文件的servlet-class内的Timer匹配)

package com.ccpit.p4.dispatch.web;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

@SuppressWarnings("serial")
public class Timer extends HttpServlet{

    //Start tomcat automatically to perform listening services
    //Override一定要写哦,不然启动tomcat后不会自动执行init()方法
    @Override
    public void init() throws ServletException{
        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);  
        executor.scheduleWithFixedDelay(new EchoServer(), 0, 1000, TimeUnit.MILLISECONDS); 
    }
}

第三步:大家是不是把第二步的代码放入工程后new EchoServer()会报错,没错这里就是真正要执行我们写的服务代码,将在下面贴出,我再描述一下scheduleWithFixedDelay这个函数各个参数的含义:参数一:待执行的任务,参数二:执行任务前的延时,参数三:每次执行任务的间隔时间单位ms,参数四:设定以ms为记时单位。

服务方法代码

package com.ccpit.p4.dispatch.web;
class EchoServer implements Runnable {
    @Override  
    public void run() {  
        try {  
            Thread.sleep(50);  
        } catch (InterruptedException e) {  
            e.printStackTrace();  
        }  
         //下面写我们要执行的代码
        System.out.println("This is a echo server. The current time is " +  
                System.currentTimeMillis() + "."); 
        
    }  
}  

至此,启动服务器将会自动执行我们特指的一个方法,我是在需要自动发送邮件的时候用到了此功能,因为在服务启动或重启之后自动监控是否有需要发送的邮箱,所用使用了启动tomcat将自动执行自己设定的方法,如有疑问欢迎留言


原文地址:https://www.cnblogs.com/guoyinli/p/7128864.html