频道栏目
首页 > 程序开发 > 移动开发 > 其他 > 正文
Tomcat+Spring奇异事件之Component两次启动
2018-03-31 10:48:08         来源:cc_want的博客  
收藏   我要投稿

不知道怎么回事,在启动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,我们自行设置过滤规则,这样就避免了重复加载

点击复制链接 与好友分享!回本站首页
上一篇:移动开发中如何设置uitabBar中某个item只显示图片不显示文字,并且图片垂直居中
下一篇:Activity的四种启动模式应用场景
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站