項目部署到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中方法在開發時,應該是很好用的。

這里寫圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM