You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot启动失败:创建filterChain Bean报错求助

Spring Boot启动失败:无法提取方法参数名导致嵌入式Tomcat启动异常

启动Spring Boot应用时遭遇启动失败,报错无法启动嵌入式Tomcat。追踪错误栈后发现,根源是无法提取com.fis.epo.base.security.config.RolesCacheEndpoint类中deleteCachByKey(java.lang.String,java.lang.String)方法的参数名,进而引发连锁Bean创建异常:无法创建healthEndpointWebMvcHandlerMapping、mvcHandlerMappingIntrospector,最终导致filterChain Bean创建失败,webSecurityConfiguration依赖注入不满足。

具体错误日志

{"instant":{"epochSecond":1714980804,"nanoOfSecond":741495900},"thread":"main","level":"ERROR","loggerName":"org.springframework.boot.SpringApplication","message":"应用启动失败","thrown":{"commonElementCount":0,"localizedMessage":"无法启动Web服务器","message":"无法启动Web服务器","name":"org.springframework.context.ApplicationContextException","cause":{"commonElementCount":7,"localizedMessage":"无法启动嵌入式Tomcat","message":"无法启动嵌入式Tomcat","name":"org.springframework.boot.web.server.WebServerException","cause":{"commonElementCount":7,"localizedMessage":"创建名为'org.springframework.security.config.annotation.web.configuration.webSecurityConfiguration'的Bean出错:方法'setFilterChains'参数0存在不满足的依赖:创建类路径资源[com/fis/epo/base/security/config/WebSecurityAutoConfiguration$StandardSecurityConfig.class]中定义的'filterChain' Bean失败:无法实例化[org.springframework.security.web.SecurityFilterChain]:工厂方法'filterChain'抛出异常,消息为:创建类路径资源[org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]中定义的'mvcHandlerMappingIntrospector' Bean出错:创建类路径资源[org/springframework/boot/actuate/autoconfigure/health/HealthEndpointWebExtensionConfiguration$MvcAdditionalHealthEndpointPathsConfiguration.class]中定义的'healthEndpointWebMvcHandlerMapping' Bean出错:无法实例化[org.springframework.boot.actuate.endpoint.web.servlet.AdditionalHealthEndpointPathsWebMvcHandlerMapping]:工厂方法'healthEndpointWebMvcHandlerMapping'抛出异常,消息为:无法提取public void com.fis.epo.base.security.config.RolesCacheEndpoint.deleteCachByKey(java.lang.String,java.lang.String)的参数名","message":"创建名为'org.springframework.security.config.annotation.web.configuration.webSecurityConfiguration'的Bean出错:方法'setFilterChains'参数0存在不满足的依赖:创建类路径资源[com/fis/epo/base/security/config/WebSecurityAutoConfiguration$StandardSecurityConfig.class]中定义的'filterChain' Bean失败:无法实例化[org.springframework.security.web.SecurityFilterChain]:工厂方法'filterChain'抛出异常,消息为:创建类路径资源[org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]中定义的'mvcHandlerMappingIntrospector' Bean出错:创建类路径资源[org/springframework/boot/actuate/autoconfigure/health/HealthEndpointWebExtensionConfiguration$MvcAdditionalHealthEndpointPathsConfiguration.class]中定义的'healthEndpointWebMvcHandlerMapping' Bean出错:无法实例化[org.springframework.boot.actuate.endpoint.web.servlet.AdditionalHealthEndpointPathsWebMvcHandlerMapping]:工厂方法'healthEndpointWebMvcHandlerMapping'抛出异常,消息为:无法提取public void com.fis.epo.base.security.config.RolesCacheEndpoint.deleteCachByKey(java.lang.String,java.lang.String)的参数名","name":"org.springframework.beans.factory.UnsatisfiedDependencyException","cause":{"commonElementCount":7,"localizedMessage":"创建类路径资源[com/fis/epo/base/security/config/WebSecurityAutoConfiguration$StandardSecurityConfig.class]中定义的'filterChain' Bean出错:无法实例化[org.springframework.security.web.SecurityFilterChain]:工厂方法'filterChain'抛出异常,消息为:创建类路径资源[org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]中定义的'mvcHandlerMappingIntrospector' Bean出错"}}}}

解决方案

  • 确保编译时保留参数名:
    • Maven项目:在pom.xml中配置maven-compiler-plugin,开启参数名保留
      <build>
          <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <version>3.8.1</version>
                  <configuration>
                      <parameters>true</parameters>
                  </configuration>
              </plugin>
          </plugins>
      </build>
      
    • Gradle项目:在build.gradle中添加参数配置
      compileJava {
          options.parameters = true
      }
      
  • 为deleteCachByKey方法的参数添加@Param注解,显式指定参数名:
    public void deleteCachByKey(@Param("key1") String key1, @Param("key2") String key2) {
        // 方法实现
    }
    
  • 检查Spring Boot版本,若使用较旧版本,升级至稳定版(如2.7.x或3.x系列),修复可能存在的Actuator端点参数名提取兼容问题
  • 若该端点非业务必需,可临时注释RolesCacheEndpoint相关配置,先启动应用排查其他问题

内容的提问来源于stack exchange,提问作者Vinay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:35:54