不知道怎么回事,在启动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两次启动相关推荐

  1. 框架源码专题:Spring的事件监听、发布机制 ApplicationListener

    文章目录 1.Spring内置事件 2.自定义事件 3.事件监听器 4.事件发布 publishEvent 4.Spring事件原理 5. 面试题:怎么样可以在所有Bean创建完后做扩展代码? 6. ...

  2. java spring eventbus_Spring 事件:Application Event

    前言 想必你一定为两个 Bean 之间基于耗时事件处理的通知和处理顺序而困扰吧,有困扰没事,不要憋在肚子里,早已经有先驱们发现了痛点并设计出了解决方案--Application Event.(了解 A ...

  3. tomcat + spring mvc原理(二):tomcat容器初始化加载和启动

    tomcat + spring mvc原理(二):tomcat容器动态加载 容器通用生命周期标准 容器通用生命周期的实现 生命周期状态监听器的管理实现 生命周期方法实现 宏观来看各种容器生命周期的实际 ...

  4. Spring事务事件监控

    2019独角兽企业重金招聘Python工程师标准>>> 前面我们讲到了Spring在进行事务逻辑织入的时候,无论是事务开始,提交或者回滚,都会触发相应的事务事件.本文首先会使用实例进 ...

  5. tomcat + spring mvc原理(六):tomcat WAR包的部署与加载

    tomcat + spring mvc原理(六):tomcat WAR包的部署与加载 前言 监控的启动原理 状态监听 部署项目 前言 单独部署的tomcat服务器在运行中,当开发人员或者运维人员将开发 ...

  6. Spring Event事件发布机制

    使用Spring Event优雅实现业务需求. 文章目录 一. 什么是Spring Event 二. 为什么要用Spring Event 三. 使用Spring Event实现邮件发送 一. 什么是S ...

  7. 如何实现业务解耦?spring中事件监听了解一下

    一.前言 二.业务解耦之事件监听实战         1.事件监听三大组件          2.事件发布以及监听实战案例          3.事件发布以及监听原理 一.前言 耦合这个词在平常的开发 ...

  8. Spring的事件发布机制

    一:Spring的事件发布 ApplicationContext提供了针对Bean的事件传播功能,其中的主角是publishEvent()方法,通过这个方法可以将事件通知给系统内的监听器(需实现App ...

  9. spring的事件机制实战

    理论 在分布式场景下,实现同步转异步的方式有三种方式: 1.异步线程池执行:比如借助@Asyn注解,放到spring自带的线程池中去执行: 2.放到消息队列中,在消费者的代码中异步的消费,执行相关的逻 ...

  10. Spring之事件监听

    spring的监听事件模型应该是观察者模式.本人项目里的应用在process方法按日期同步某个库的数据,在方法最后publish一个event事件,这个事件用于后续同步过来的数据处理.事件处理采用了s ...

最新文章

  1. 拥抱haXe之javascript 也玩mvc
  2. 5.触摸touch,单点触摸,多点触摸,触摸优先和触摸事件的吞噬
  3. 全局变量名为 param1 var param1Value = webBrowser1.Document.InvokeScript(eval,new String[]{ param1}).To...
  4. mysql8碰到 ERROR 1064 (42000)
  5. 转 python测试框架最全资源汇总
  6. 重塑营销场景,用友优普助宁波力劲销售管理精细化
  7. snmp是什么层协议_计算机网络基础:TCP/IP协议相关知识笔记?
  8. Android中生成库文件与移除以及导入jar包重复问题
  9. FM1208CPU卡读写函数说明
  10. UFS学习一:UTP层和UPIU
  11. 打开计算机管理的常用方法,电脑中的“计算机管理”界面打开方法大全
  12. Bouncy Castle 密码包的配置及使用详解
  13. PS-twoday-移动工具
  14. 分享几款让你工作事半功倍的软件
  15. 2022年浙江省中职组“网络空间安全”编码信息获取
  16. permission denied (publickey)问题的解决
  17. 使用c++开发excel插件 (第3章动态链接库(dynamic-link library))
  18. java-生产环境不重启 JVM,替换掉已经加载的类
  19. 微软C2030服务器,联想支持Windows 10系统升级机型列表
  20. 英文学习20180206

热门文章

  1. Windows电脑开机后进不了系统的解决方法
  2. 中国人口总数、老龄人口占比及2040人口年龄结构变化预测
  3. 笔记本上怎么怎么暂停cmd打印窗口
  4. 杭州电子科技大学acm--2020
  5. LED背光源技术特点
  6. 双创项目_宫颈癌智能风险检测(3)
  7. 2016英语三级分数计算机,2016年英语三级成绩查询准考证号忘了怎么办?
  8. 10个web开发好用框架
  9. 职场必备的30套报表模板,满足95%的报表需求,一键套用无需代码
  10. Cadence Allegro 中skill应用教程:让代码替我们打工