zoukankan      html  css  js  c++  java
  • 项目部署到tomcat Root中后导致 WebApplicationContext 初始化两次的解决方法

    上一篇文章刚说项目部署到tomcat的ROOT中,今天就发现一个问题。通过eclipse启动tomcat时候,WebApplicationContext 初始化两次;

    现象:

      通过eclipse控制台看到日志中WebApplicationContext 初始化两次,从而导致一个端口一直被占用;(怎么修改都是占用)

    第一次初始化:

    
    九月 27, 2016 11:43:20 下午 org.apache.catalina.core.ApplicationContext log
    信息: Initializing Spring root WebApplicationContext

    第一使用端口

    2016-09-27 23:43:27 SocketIO server started at port: 8081

    第二次初始化

    
    九月 27, 2016 11:43:37 下午 org.apache.catalina.core.ApplicationContext log
    信息: Initializing Spring root WebApplicationContext

    第二次使用端口:

    2016-09-27 23:43:45 SocketIO server start failed at port: 8081!

    failed 。。。。。刚开始以为其他程序占用了8081端口,使劲修改端口都不行。才注意到启动了两次;


    产生的原因及后果:

      两次发布的原因是,tomcat 会发布一次 /xxx ,然后再发布一次 / ,所以就有了两次发布,两次 WebApplicationContext 的初始化。

    导致问题:

    问题一

      第二次初始化时,会导致 数据库的连接数,增加 初始化 的数量,比如数据库连接的初始化数目为:

    initialPoolSize=20

      那么 第二次初始化 WebApplicationContext 会导致 数据库的连接数 增加 20 个,第一次初始化 WebApplicationContext 的数据库连接不会释放!

    问题二

    导致端口占用。

    问题三

    会导致 定时器 任务 会多次触发.

    ….


    解决方法:

    1. 可以在 tomcat 前端 加个 nginx, 让 nginx 指向 tomcat,这样就不用修改项目的 context root目录到 / 了;

    2. 可以直接在发布项目时,打个包,然后解压到 tomcat 的 ROOT目录下,这样也 不需要修改 项目的 context root
      目录到 / 了;

    3. 如果觉得 打包,然后解压到 tomcat的 root 目录还是麻烦,那么可以将项目的名称 改成 ROOT,然后将 项目的 context root 改成 /,可以直接发布到了 tomcat 的ROOT目录下;不需要打包,然后解压了;

    4. 不要把Deploy path设置成webapps就可以了,也就是不让tomcat去加载webapps那一次

    第4中方法在开发时,应该是很好用的。

    这里写图片描述

  • 相关阅读:
    2019 SDN上机第7次作业
    2019 SDN上机第六次作业
    2019 SDN上机第5次作业
    SDN课程阅读作业(2)
    2019 SDN上机第4次作业
    2019 SDN阅读作业
    2019 SDN上机第3次作业
    第09组 团队Git现场编程实战
    预习非数值数据的编码方式
    预习原码补码
  • 原文地址:https://www.cnblogs.com/itrena/p/5927111.html
Copyright © 2011-2022 走看看