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,我们自行设置过滤规则,这样就避免了重复加载
Tomcat+Spring奇异事件之Component两次启动相关推荐
- 框架源码专题:Spring的事件监听、发布机制 ApplicationListener
文章目录 1.Spring内置事件 2.自定义事件 3.事件监听器 4.事件发布 publishEvent 4.Spring事件原理 5. 面试题:怎么样可以在所有Bean创建完后做扩展代码? 6. ...
- java spring eventbus_Spring 事件:Application Event
前言 想必你一定为两个 Bean 之间基于耗时事件处理的通知和处理顺序而困扰吧,有困扰没事,不要憋在肚子里,早已经有先驱们发现了痛点并设计出了解决方案--Application Event.(了解 A ...
- tomcat + spring mvc原理(二):tomcat容器初始化加载和启动
tomcat + spring mvc原理(二):tomcat容器动态加载 容器通用生命周期标准 容器通用生命周期的实现 生命周期状态监听器的管理实现 生命周期方法实现 宏观来看各种容器生命周期的实际 ...
- Spring事务事件监控
2019独角兽企业重金招聘Python工程师标准>>> 前面我们讲到了Spring在进行事务逻辑织入的时候,无论是事务开始,提交或者回滚,都会触发相应的事务事件.本文首先会使用实例进 ...
- tomcat + spring mvc原理(六):tomcat WAR包的部署与加载
tomcat + spring mvc原理(六):tomcat WAR包的部署与加载 前言 监控的启动原理 状态监听 部署项目 前言 单独部署的tomcat服务器在运行中,当开发人员或者运维人员将开发 ...
- Spring Event事件发布机制
使用Spring Event优雅实现业务需求. 文章目录 一. 什么是Spring Event 二. 为什么要用Spring Event 三. 使用Spring Event实现邮件发送 一. 什么是S ...
- 如何实现业务解耦?spring中事件监听了解一下
一.前言 二.业务解耦之事件监听实战 1.事件监听三大组件 2.事件发布以及监听实战案例 3.事件发布以及监听原理 一.前言 耦合这个词在平常的开发 ...
- Spring的事件发布机制
一:Spring的事件发布 ApplicationContext提供了针对Bean的事件传播功能,其中的主角是publishEvent()方法,通过这个方法可以将事件通知给系统内的监听器(需实现App ...
- spring的事件机制实战
理论 在分布式场景下,实现同步转异步的方式有三种方式: 1.异步线程池执行:比如借助@Asyn注解,放到spring自带的线程池中去执行: 2.放到消息队列中,在消费者的代码中异步的消费,执行相关的逻 ...
- Spring之事件监听
spring的监听事件模型应该是观察者模式.本人项目里的应用在process方法按日期同步某个库的数据,在方法最后publish一个event事件,这个事件用于后续同步过来的数据处理.事件处理采用了s ...
最新文章
- 拥抱haXe之javascript 也玩mvc
- 5.触摸touch,单点触摸,多点触摸,触摸优先和触摸事件的吞噬
- 全局变量名为 param1 var param1Value = webBrowser1.Document.InvokeScript(eval,new String[]{ param1}).To...
- mysql8碰到 ERROR 1064 (42000)
- 转 python测试框架最全资源汇总
- 重塑营销场景,用友优普助宁波力劲销售管理精细化
- snmp是什么层协议_计算机网络基础:TCP/IP协议相关知识笔记?
- Android中生成库文件与移除以及导入jar包重复问题
- FM1208CPU卡读写函数说明
- UFS学习一:UTP层和UPIU
- 打开计算机管理的常用方法,电脑中的“计算机管理”界面打开方法大全
- Bouncy Castle 密码包的配置及使用详解
- PS-twoday-移动工具
- 分享几款让你工作事半功倍的软件
- 2022年浙江省中职组“网络空间安全”编码信息获取
- permission denied (publickey)问题的解决
- 使用c++开发excel插件 (第3章动态链接库(dynamic-link library))
- java-生产环境不重启 JVM,替换掉已经加载的类
- 微软C2030服务器,联想支持Windows 10系统升级机型列表
- 英文学习20180206