项目部署到tomcat Root中后导致 WebApplicationContext 初始化两次的解决方法

    xiaoxiao2023-03-24  5

    上一篇文章刚说项目部署到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 的数据库连接不会释放!

    问题二

    导致端口占用。

    问题三

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

    ….


    解决方法:

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

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

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

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

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

    转载请注明原文地址: https://ju.6miu.com/read-1201815.html
    最新回复(0)