AWS Lambda函数中的{“ errorType”:“ java.lang.ExceptionInInitializerError”}

时间:2019-09-18 18:24:13

标签: java maven spring-boot aws-lambda

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

但是,当我尝试通过以JSON格式提供i / p作为Test Event进行测试并尝试在调用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);
        }

}

1 个答案:

答案 0 :(得分:0)

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

将您的代码更改为以下代码,以便您可以首先看到为什么引发异常,然后解决该错误:

. . .
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);
    }
}
. . .

静态加载时始终要小心。