我在SpringBoot中开发了一项服务,并将在AWS中进行部署。在LambdaHandler中,指定了Spring Applucation类名称以在AWS环境中运行SpringBoot应用程序。

但是,当我尝试通过以JSON格式提供i / p作为测试事件进行测试,并尝试在调用Lambda函数时将记录插入数据库中时,AWS Lambda控制台中的错误越来越少

{
  "errorMessage": "Error loading class com.example.lambda.LambdaHandler",
  "errorType": "java.lang.ExceptionInInitializerError"
}


这是我的LambdaHandler类别

public class LambdaHandler implements RequestHandler<AwsProxyRequest, AwsProxyResponse> {

    private static SpringBootLambdaContainerHandler<AwsProxyRequest, AwsProxyResponse> handler;

    static {
        try {
            handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(SpringBootApplication.class);
        } catch (ContainerInitializationException e) {
            // if we fail here. We re-throw the exception to force another cold start
            e.printStackTrace();
            throw new RuntimeException("Could not initialize Spring Boot Application", e);
        }
    }

    @Override
    public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) {
        return handler.proxy(awsProxyRequest, context);
    }
}


这是我的主要应用程序类别

  public class SpringBootApplication {

        public static void main(String[] args) {

            SpringApplication.run(SpringBootApplication.class, args);
        }

}

最佳答案

在静态上下文中引发的异常会导致此错误。

将您的代码更改为以下代码,以便您可以首先了解其引发异常的原因,然后解决该错误:

. . .
static {
    try {
        handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(SpringBootApplication.class);
    } catch (Exception e) {
        // if we fail here. We re-throw the exception to force another cold start
        e.printStackTrace();
        throw new RuntimeException("Could not initialize Spring Boot Application", e);
    }
}
. . .


静态加载时请务必谨慎。

10-05 22:54
查看更多