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

AWS Lambda偶发重启及FunctionCatalog Bean缺失问题排查求助

AWS Lambda 偶发重启及NoSuchBeanDefinitionException问题排查与解决

我的AWS Lambda会不定期重启,且间歇性抛出异常:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.cloud.function.context.FunctionCatalog'

虽然功能能正常运行,但这个偶发问题一直无法定位原因,相关代码结构和依赖信息如下:


相关代码结构

Lambda入口类

@Slf4j
@Generated
@SpringBootApplication
@EnableConfigurationProperties({Properties.class,})
public class LambdaApplication {

 private Properties properties;

 @Bean
    public Function<Event, Void> handleRequest() throws Exception {
        LambdaHandler handler = new LambdaHandler(properties);
        return handler::handleRequest;
    }

 public static void main(String[] args) {
        SpringApplication.run(LambdaApplication.class, args);
    }
}

业务逻辑类

@Service
public class LambdaHandler {
  public Void handleRequest(Event event) {
    // 业务逻辑实现
  }
}

配置类

@Data
@ConfigurationProperties("items")
public class Properties {
    private String appId;
    private String items;
    private String eventscare;
    // 其他属性省略
}

依赖版本信息

com.dev.CLASSPATHINFO : jar=spring-beans-5.3.30.jar baseName=spring-beans jarVersion=5.3.30 modTime=2023-12-19T20:30:18.000 length=706239 jarPath=lib/spring-beans-5.3.30.jar
com.dev.CLASSPATHINFO : jar=spring-boot-2.7.16.jar baseName=spring-boot jarVersion=2.7.16 modTime=2023-12-19T20:30:18.000 length=1466387 jarPath=lib/spring-boot-2.7.16.jar
com.dev.CLASSPATHINFO : jar=spring-boot-autoconfigure-2.7.16.jar baseName=spring-boot-autoconfigure jarVersion=2.7.16 modTime=2023-12-19T20:30:18.000 length=1689267 jarPath=lib/spring-boot-autoconfigure-2.7.16.jar
com.dev.CLASSPATHINFO : jar=spring-boot-configuration-processor-2.7.16.jar baseName=spring-boot-configuration-processor jarVersion=2.7.16 modTime=2023-12-19T20:30:18.000 length=119803 jarPath=lib/spring-boot-configuration-processor-2.7.16.jar
com.dev.CLASSPATHINFO : jar=spring-boot-starter-2.7.16.jar baseName=spring-boot-starter jarVersion=2.7.16 modTime=2023-12-19T20:30:18.000 length=4772 jarPath=lib/spring-boot-starter-2.7.16.jar
com.dev.CLASSPATHINFO : jar=spring-boot-starter-json-2.7.16.jar baseName=spring-boot-starter-json jarVersion=2.7.16 modTime=2023-12-19T20:30:18.000 length=4749 jarPath=lib/spring-boot-starter-json-2.7.16.jar

问题排查与解决思路

1. 缺失Spring Cloud Function核心依赖

FunctionCatalog是Spring Cloud Function的核心类,当前依赖列表完全没有包含Spring Cloud Function相关包。Lambda冷启动或重启时,Spring上下文初始化找不到该类,就会抛出异常;后续请求可能因为容器复用暂时规避问题,但无法彻底解决。

需要添加适配Spring Boot 2.7.x的Spring Cloud Function依赖:

<!-- Maven示例,Gradle可对应调整 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-function-starter</artifactId>
    <version>3.2.10</version> <!-- 与Spring Boot 2.7.x兼容版本 -->
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-function-adapter-aws</artifactId>
    <version>3.2.10</version>
</dependency>

2. 手动实例化Bean破坏Spring依赖注入

当前入口类中手动new LambdaHandler(properties)存在两个问题:

  • properties变量未被Spring注入,处于未初始化状态,可能引发空指针或配置读取异常
  • 手动创建的LambdaHandler不受Spring容器管理,破坏Bean生命周期和依赖链

修改为通过构造注入获取Bean:

@Slf4j
@Generated
@SpringBootApplication
@EnableConfigurationProperties({Properties.class,})
public class LambdaApplication {

 private final Properties properties;
 private final LambdaHandler lambdaHandler;

 // 构造注入
 public LambdaApplication(Properties properties, LambdaHandler lambdaHandler) {
     this.properties = properties;
     this.lambdaHandler = lambdaHandler;
 }

 @Bean
 public Function<Event, Void> handleRequest() {
     return lambdaHandler::handleRequest;
 }

 public static void main(String[] args) {
     SpringApplication.run(LambdaApplication.class, args);
 }
}

3. 确保LambdaHandler由Spring管理

LambdaHandler标注了@Service,应该完全由Spring容器实例化和管理,禁止手动创建实例,避免破坏Spring的依赖注入机制。

4. 依赖版本兼容性校验

使用Spring Cloud 2021.0.8(Jubilee)版本,该版本与Spring Boot 2.7.16完全兼容,避免版本不匹配导致的上下文初始化异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:52:10