spring项目的 context root 修改之后,导致 WebApplicationContext 初始化两次的解决方法...

修改了 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 秒钟。两次发布的原因是,tomcat 会发布一次 /xxx ,然后在发布一次 / ,所以就有了两次发布,两次 WebApplicationContext  的初始化

两次初始化 WebApplicationContext   会导致很多问题:

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) |
+------+-------------+
|      |           46 |
+------+-------------+
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: 46  Questions: 20950  Slow queries: 0  Opens: 131  Flush tab
--------------
Threads: 46 表示有46个连接。

2. 问题二

  会 导致dubbo消费者注册了两次。

3. 问题三

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

....

4. 解决方法:

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值