Spring Boot Actuator1.5.22与Spring5.2.17集成启动报栈溢出错误
问题根因
- 核心原因是版本不兼容:Spring Boot 1.5.22属于Spring Boot 1.x版本分支,官方适配的Spring Framework版本为4.3.x,你强制使用Spring 5.2.17跨大版本搭配,必然出现各类兼容性问题。
- 本次栈溢出的直接触发逻辑:Spring 5新增的
HandlerMappingIntrospector类初始化时会扫描容器内所有的HandlerMapping实例,其中就包括Actuator 1.5.x提供的EndpointHandlerMapping;而1.5.x版本的EndpointHandlerMapping执行初始化逻辑时,又会反过来触发HandlerMappingIntrospector的加载,两者形成递归调用,最终抛出StackOverflowError。你在AppConfig中手动注册mvcHandlerMappingIntrospectorBean的操作,进一步提前了这个冲突的触发时机。
解决方案
提供两种可选方案,优先选择方案一:
- 方案一(最稳妥):将Spring Framework版本降级到4.3.x分支的最新稳定版,和Spring Boot 1.5.22的官方适配要求对齐,即可彻底解决版本兼容带来的各类问题,无需修改现有业务配置代码。
- 方案二(适配高版本Spring):如果必须使用Spring 5.2.17版本,则将Spring Boot版本升级到2.2.x及以上的适配Spring 5.2.x的版本,同时升级Spring Boot Actuator到对应匹配版本即可。Spring Boot 2.x版本已经自动集成
HandlerMappingIntrospector的配置,你现有代码中手动定义的mvcHandlerMappingIntrospectorBean可以直接删除。
内容的提问来源于stack exchange,提问作者Mustafa Behrainwala
相关产品推荐
相关产品推荐

