Tomcat启动时自动运行某程序

项目需要和tmall实现长连接,接收tmall推送的Order消息,然后对消息进行逻辑处理。

目前写了一个servlet,实现了permit的验证,然后对tmall进行长连接操作,启动后,只要tomcat一直运行着,长连接就不会断掉。现在的需求是tomcat启动后我这个servlet自己就运行起来,不用我自己再去访问一下配置的servlet路径。

资料:

http://www.cnblogs.com/Payne-Wang/archive/2013/04/01/loadOnTomcatStartup.html

https://blog.csdn.net/csnewdn/article/details/54618366

https://www.cnblogs.com/wdpnodecodes/p/8025134.html

有两种方法实现需求

方法一:servlet里面重写init()方法

第一步:自定义一个servlet,重写init()方法

public class GetMessageFromTBServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        super.init();
        System.out.println("开始了。。。。。");
        if ( MessageWork.getPermit())
        {
            try {
                MessageWork.getMessageFromTaoBao();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

第二步:配置web.xml 映射servlet地址,并添加启动优先级

<load-on-startup>N</load-on-startup> 的含义是:标记容器是否在启动的时候就加载这个servlet。当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。正数的值越小,启动该servlet的优先级越高。

方法二:servlet的Listener监听器

第一步:自定义一个listener  实现javax.servlet.ServletContextListener接口,同时实现该接口的contextInitialized(ServletContextEvent event)和contextDestroyed(ServletContextEvent event)两个接口函数。

MessageListener 类

import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import java.util.Timer;

public class MessageListener implements ServletContextListener {    private Timer timer=null;    @Override    public void contextInitialized(ServletContextEvent servletContextEvent) {    timer=new Timer(true);    servletContextEvent.getServletContext().log("start");    timer.schedule(new MessageTask(servletContextEvent.getServletContext()),10*1000,5*1000);    }

@Override    public void contextDestroyed(ServletContextEvent servletContextEvent) {

}}
 
MessageTask类
import Intermediate_system.message.MessageTest;

import javax.servlet.ServletContext;
import java.util.TimerTask;

public class MessageTask extends TimerTask {
    private static boolean isRunning=false;
    private ServletContext context=null;

    public MessageTask(ServletContext context){
        this.context=context;

    }
    @Override
    public void run() {
        if (!isRunning)
        {
            isRunning=true;
            //指定任务
            MessageTest.getPermit();
            isRunning=false;
        }else {
            context.log("任务还没有结束");
        }

    }
}

第二步:web.xml里面配置listener

servlert启动优先级

<load-on-startup>1</load-on-startup> 标记容器在启动时加载此servlet。当值为0或者大于0时,表示web容器在应用启动时就加载这个servlet;
当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载; 正数的值越小,启动该servlet的优先级越高。

原文地址:https://www.cnblogs.com/taoHongFei/p/9327820.html

时间: 2024-10-10 16:52:33

Tomcat启动时自动运行某程序的相关文章

tomcat启动时自动运行代码

原文链接:http://jingpin.jikexueyuan.com/article/49660.html 作者: 一直向北 发布时间:2015-07-13 11:12:13 方法1:tomcat 自动执行servlet 写一个servlet,在init()方法中写好想要执行的程序,程序如下: eclipse新建一个web\Dynamic Web Project , name = myweb1 , 把tomcat中的 servlet-api.jar复制到lib中,新建一个类MyServlet.

Tomcat启动时自动加载Servlet

1.想做一个服务启动时自动启动一不停止的获取订阅功能 2.之前是做一个Jsp页面请求servlet来触发方法 3.现在实现Tomcat启动时自动加载Servlet 1.Tomcat中启动Servlet时,只需要在Servlet所在的工程的配置文件web.xml中写成如下即可 <!-- 自动启动订阅接口 --> <servlet> <servlet-name>TimeServlet</servlet-name> <servlet-class>ser

如何在tomcat启动时自动加载一个类

有时候在开发web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以采用在WEB-INF/web.xml中添加一个监听程序(ServletContextListener配置项),步骤如下:1) 增加一个监听程序 MyServletContextListener.java, 实现javax.servlet.ServletContextListener接口 packag

tomcat启动时自动加载一个类&#160;MyServletContextListener

目的: 我们知道在tomcat启动后,需要页面请求进行驱动来执行操作接而响应.我们希望在tomcat启动的时候能够自动运行一个后台线程,以处理我们需要的一些操作.因此需要tomcat启动时就自动加载一个类,或运行一个类的方法. 可以采用ServletContextListener. 方法: (1)编写一个监听类,实现javax.servlet.ServletContextListener接口. 1 import javax.servlet.ServletContextEvent; 2 impor

ubuntu14.04 开机自动运行应用程序

ubuntu14.04 开机自动运行应用程序 - ydt_lwj的专栏 - 博客频道 - CSDN.NET ubuntu下有很多中开机自动运行程序的方法,在开机的不同过程中可以启动不同的程序.如在开机启动时自动运行程序,是通过修改放置在 ???? /etc/rc或 ???? /etc/rc.d 或 ???? /etc/rc?.d ?? 目录下的脚本文件,可以使init自动启动其它程序.例如:编辑 ???? /etc/rc.d/rc.local 文件(该文件通常是系统最后启动的脚本), 也可以在用

系统启动时自动运行开发的程序,采用计划任务

系统启动时自动运行开发的程序,采用计划任务. 如果通过设置注册表来实现的,发现如果用户没有登陆桌面,就不能自动运行. 所以采用计划任务,即使用用户不登陆,只要电脑开机或重启后,都能在后台运行开发的程序.

Tomcat启动时,自动访问本地servlet

通过监听器来实现 1.自定义一个类 CallLocationServelt 实现  ServletContextListener 并覆盖其  contextInitialized(ServletContextEventarg0)方法 public void contextInitialized(ServletContextEvent arg0) { // TODO Auto-generated method stub System.out.println("CallLocationServelt

tomcat启动时JVM内存大小,以免出现内存溢出

问题: 主要是2个内存溢出的错误. 首先是:java.lang.OutOfMemoryError: Java heap space 其次是:java.lang.OutOfMemoryError: PermGen space 最终解决办法[我是4G内存,请适当修改大小]: [Windows]在catalina.bat的第一行增加: set JAVA_OPTS=-Xms512m -Xmx900m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSiz

MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法

MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法 分类: javaweb2013-06-03 14:43 3706人阅读 评论(0) 收藏 举报 当单击MyEclipse中的Debug server 启动服务器的时候,出现了这么个提示: Eclipse菜单,Window->Preference…,打开Preference对话框,找到菜单树中MyEclipse-> Application Serve