zoukankan      html  css  js  c++  java
  • java web部署 启动线程 (监听socket等) 拂晓风起

    很简单……

    多写一个Servlet,在init函数中启动对应的线程。

    把这个Servlet加到web.xml中,例如

        <servlet>
            <servlet-name>EchoServiceStartUpServlet</servlet-name>
            <servlet-class>EchoService.EchoServiceStartUpServlet</servlet-class>
            <load-on-startup>3</load-on-startup>
        </servlet>

    注意load-on-startup。

    后边数字要大于0,表示优先级,越小优先级越高。

    不设置或者小于0表示不启动。
    但这样有个很大的问题!!就是没有在Tomcat关闭的时候关闭线程,也许就是没有释放监听的端口。

    应该用Listener。

    代码
    public class ServerSocketListener implements ServletContextListener {
    private EchoServerThread echoServerThread;

    public void contextInitialized(ServletContextEvent event) {
    String port
    = event.getServletContext().getInitParameter("socketPort");
    // event.getServletContext().log("++++++++++++++++++++++++++++++++");
    // event.getServletContext().log("++++ Socket服务随web启动而启动 ++++");
    echoServerThread = new EchoServerThread(Integer.parseInt(port));
    echoServerThread.start();
    // event.getServletContext().log("++++ Socket服务已经启动完毕,端口:" + port + " ++++");
    }

    //tomcat关闭时,关闭线程,释放端口
    public void contextDestroyed(ServletContextEvent event) {
    echoServerThread.stopThread();
    }
    }

     这里就有启动和释放的操作了~~~

    然后在web.xml中这样配置:

    在web-app节点下加入:

        <context-param>
            <param-name>socketPort</param-name>
            <param-value>2230</param-value>
        </context-param>
        <listener>
            <description>Socket服务随web启动而启动</description>
            <listener-class>EchoService.ServerSocketListener</listener-class>
        </listener>

    kenkofox@qq.com https://github.com/kenkozheng 欢迎投简历给我,一线大厂工作机会
  • 相关阅读:
    CentOS 7/8修改系统运行级别
    Sketchup 汇总
    [转]Ruby之类的真相
    [转]Ruby之代码块的迷思
    [转]ruby中的异常处理
    [转]ruby中Class的allocate
    [转]ruby中require和load的区别
    [转]ruby之方法查找
    [转]ruby之动态方法
    [转] ruby之对象体系
  • 原文地址:https://www.cnblogs.com/kenkofox/p/1732024.html
Copyright © 2011-2022 走看看