Tomcat+Spring奇异事件之Component两次启动

不知道怎么回事,在启动tomcat时发现了一个诡异的现象,一个用来加载资源全局配置的Component在tomcat启动的时候加载了两次:

具体情况是这样的


我创建了一个Env的Component,希望项目在运行时加载一些全局的配置,比如开发测试环境区分,以及一些资源的初始化,但是在启动时,通过日志发现以下问题


Env类被初始化了两次,什么原因呢?

刚开始,带着疑问在网上去寻找答案,说是tomcat下的server.xml配置问题,后来我改成如下配置


按照网上给的答案,通过加deployIgnore,改appBase等,我什么方法都试了,还是不行,这会儿我在想是不是我spring配置的问题,于是,终于找到了真相


这里有两个配置spring文件,app-root对应的就是applicationContext.xml,app-servlet对应的就是spring-mvc

先来看看我们错误的写法:

在app-root我们是这样写的


在app-servlet中,我们是这样写的


ok,在网上找了乱七八糟的一堆资料后,确认正确的写法如下:

在app-servlet中应该这样写:


第一,添加use-default-filters="false",取消使用默认的过滤规则

第二,因为在app-root中我们过滤掉了controller的加载,所以我们需要在此处加上对controller的处理

问题到这里已经解决了,接下来我们分析一下问题出现的原因:

在app-root中我们过滤掉了controller的加载,但是没有限制Server,Component,Repository的加载,所以当程序执行到app-servlet的时候,因为use-default-filters默认为true,即没有过滤规则,便会重复加载Server,Component,Repository,到这里我们就算是找到了问题的根源了

首先通过exclude-filter 进行黑名单过滤;

然后通过include-filter 进行白名单过滤;

将use-default-filters设置为false,我们自行设置过滤规则,这样就避免了重复加载


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值