spring项目的 context root 修改之后,导致 WebApplicationContext 初始化两次的解决方法
2016-04-22 16:49
741 查看
修改了 spring web 项目的 context root 为 / 之后,在启动项目时,会导致 WebApplicationContext 初始化两次,下面是其初始化日志:
第一次初始化:
第二次初始化:
可以看到两次初始化之间仅仅相隔了 6 秒钟。两次发布的原因是,tomcat 会发布一次 /xxx ,然后在发布一次 / ,所以就有了两次发布,两次 WebApplicationContext 的初始化。
两次初始化 WebApplicationContext 会导致很多问题:
1. 问题一
第二次初始化时,会导致 数据库的连接数,增加 初始化 的数量,比如数据库连接的初始化数目为:
initialPoolSize=20
那么 第二次初始化 WebApplicationContext 会导致 数据库的连接数 增加 20 个,第一次初始化 WebApplicationContext 的数据库连接不会释放!
使用 select host, count(host) from information_schema.processlist; 可以查看 连接数;
也可以使用 status 名录,直接查看连接数:
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中方法在开发时,应该是很好用的。
第一次初始化:
四月 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中方法在开发时,应该是很好用的。
相关文章推荐
- 配置文件——WebApp.config文件读取和修改
- spring java 获取webapp下文件路径
- 通过WebApplicationContextUtils工具类获取ApplicationContext对象
- WebApp 九宫格抽奖简易demo
- 图文详解MyEclipse中新建Maven webapp项目的步骤(很详细)
- 网易webapp 通过js计算html的font-size
- (box-flex) webapp开发信息流的一种方式
- 扯谈spring mvc之WebApplicationContext的继承关系
- Spring-MVC理解之一:应用上下文webApplicationContext
- webapp 微信开发适配问题
- spring mvc 源码研究简单笔记--web容器启动加载WebApplicationContext和初始化DispatcherServlet
- Choose unique values for the 'webAppRootKey' context-param in your web.xml files!
- Jersey(1.19.1) - WebApplicationException and Mapping Exceptions to Responses
- AngularJS学习笔记(三) 单页面webApp和路由(ng-route)
- WebApp开发之--"rem"单位(转)
- WebApplicationInitializer (spring 3.x.x以上版本)
- 创建maevn项目的时候报错:maven-archetype-webapp:pom:RELEASE
- web中webAppRootKey作用
- spring设置webAppRootKey
- java web中如何获取spring容器中定义的bean----WebApplicationContext的使用