程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> spring項目的 context root 修改之後,導致 WebApplicationContext 初始化兩次的解決方法,spring初始化兩次

spring項目的 context root 修改之後,導致 WebApplicationContext 初始化兩次的解決方法,spring初始化兩次

編輯:JAVA綜合教程

spring項目的 context root 修改之後,導致 WebApplicationContext 初始化兩次的解決方法,spring初始化兩次


修改了 spring web 項目的 context root 為 / 之後,在啟動項目時,會導致 WebApplicationContext  初始化兩次,下面是其初始化日志:

第一次初始化:

四月 22, 2016 4:30:33 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext

第二次初始化:

四月 22, 2016 4:30:39 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext

可以看到兩次初始化之間僅僅相隔了 6 秒鐘

兩次初始化 會導致很多問題。

1. 問題一

第二次初始化時,會導致 數據庫的連接數,增加 初始化 的數量,比如數據庫連接的初始化數目為:

initialPoolSize=20

那麼 第二次初始化 WebApplicationContext  會導致 數據庫的連接數 增加 20 個,第一次初始化 WebApplicationContext  的數據庫連接不會釋放

使用 select host, count(host) from information_schema.processlist; 可以查看 連接數;

也可以使用 status 名錄,直接查看連接數:

mysql> select host, count(host) from information_schema.processlist;
+------+-------------+
| host | count(host) |
+------+-------------+
|      |           6 |
+------+-------------+
1 row in set (0.01 sec)

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.6.27, for Win32 (x86)

Connection id:          34
Current database:
Current user:           ODBC@
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.6.27-log MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
TCP port:               3306
Uptime:                 8 hours 12 min 16 sec

Threads: 6  Questions: 20950  Slow queries: 0  Opens: 131  Flush tab
--------------
Threads: 6 表示有6個連接。

2. 問題二

  會 導致dubbo消費者注冊了兩次。

....

3. 解決方法:

1)可以在 tomcat 前端 加個 nginx, 讓 nginx 指向 tomcat,這樣就不用修改 項目的 context root 目錄到 / 了;

2)可以直接在發布項目時,打個包,然後解壓到 tomcat 的 ROOT目錄下,這樣也 不需要修改 項目的 context root 目錄到 / 了;

3)如果覺得 打包,然後解壓到 tomcat的 root 目錄還是麻煩,那麼可以將項目的名稱 改成 ROOT,然後將 項目的 context root 改成 /,可以直接發布到了 tomcat 的ROOT目錄下;

不需要打包,然後解壓了;

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved