zoukankan      html  css  js  c++  java
  • 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中方法在开发时,应该是很好用的。

  • 相关阅读:
    flask综合整理1
    flask
    linux
    用户登录权限汇总
    DRF之注册响应分页组件
    MVC 过滤器 构建会员是否登录
    压缩文本、字节或者文件的压缩辅助类-GZipHelper
    MVC 构建图片/文件选择器 参考其它CMS功能
    MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案
    MVC5+EF6 简易版CMS(非接口) 第三章:数据存储和业务处理
  • 原文地址:https://www.cnblogs.com/digdeep/p/5421938.html
Copyright © 2011-2022 走看看