• 项目部署到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中方法在开发时,应该是很好用的。

    这里写图片描述

  • 相关阅读:
    Shell编程之数值运算(二) Theletter
    Shell编程检测某个服务是否运行实例 Theletter
    Shell编程之条件测试与比较(详解) Theletter
    eclipse中svn提交时报Previous operation has not finished; run 'cleanup' if it was interrupted错误的解决方法
    Jsp连接打印机
    Jsp中table导出到excel
    java创建图片验证码
    java利用映射表名称反射创建实体类并赋属性值
    基于方法的LINQ语句
    opencv中cvCreateImage大图片时出错
  • 原文地址:https://www.cnblogs.com/itrena/p/5927111.html
Copyright © 2020-2023  润新知