我已将一个简单的Spring Boot项目上传到Amazon Lambda,我目前正在尝试测试它。 它100%工作但我尝试注入Spring Bean时得到一个空指针 这是我的LambdaHandler代码
package com.test.services.lambda;
import java.util.Calendar;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.test.services.MyServices;
public class MyLambdaFunctionHandler implements RequestHandler<String, String> {
public MyLambdaFunctionHandler() {
}
@Autowired
private ApplicationContext springContext;
private MyServices myServices;
public String handleRequest(String input, Context lambdaContext) {
this.myServices = springContext.getBean(MyServices.class);
lambdaContext.getLogger().log("AWS Request ID: " + lambdaContext.getAwsRequestId());
lambdaContext.getLogger().log("Input: " + input + " at " + Calendar.getInstance().getTimeInMillis());
myServices.sendGoodMessage("Message sent from Lambda");
return "Hello World";
}
}
我将Amazon Lambda中的处理程序设置为以下
com.test.services.lambda.MyLambdaFunctionHandler::handleRequest
但是,当我测试此功能时 - 我收到此错误消息
{
"errorMessage": "java.lang.NullPointerException",
"errorType": "java.lang.NullPointerException",
"stackTrace": [
"com.test.services.lambda.MyLambdaFunctionHandler.handleRequest(SlackLambdaFunctionHandler.java:23)",
"com.test.services.lambda.MyLambdaFunctionHandler.handleRequest(SlackLambdaFunctionHandler.java:12)"
]
}
我注入Spring Bean失败了 任何人都可以就如何将Spring bean注入我的AWS Lambda处理程序提供任何建议吗?
非常感谢对此的任何帮助
由于 达明
答案 0 :(得分:2)
有几种方法可以注入ApplicationContext
。
只要spring管理你的bean,你的工作就应该工作。您是否在某个MyLambdaFunctionHandler
文件中将@Configuration
声明为@Bean
?
您是否在某个地方使用new MyLambdaFunctionHandler()
在春天@Configuration
之外进行初始化? (这意味着spring不管理你的bean)。
如果spring不管理你的bean,它就不能将bean注入其中。
如果没有,则应使用@Component
进行注释,并由某些@ComponentScan
进行扫描。
如果声明了,您应该使用spring ApplicationContextAware
来设置ApplicationContext
。 Spring有很多这样的实用程序接口,可以将一些核心类注入到bean中。
示例:
public class MyLambdaFunctionHandler implements RequestHandler<String, String>, ApplicationContextAware {
public MyLambdaFunctionHandler() {
}
private ApplicationContext springContext;
private MyServices myServices;
public String handleRequest(String input, Context lambdaContext) {
this.myServices = springContext.getBean(MyServices.class);
lambdaContext.getLogger().log("AWS Request ID: " + lambdaContext.getAwsRequestId());
lambdaContext.getLogger().log("Input: " + input + " at " + Calendar.getInstance().getTimeInMillis());
myServices.sendGoodMessage("Message sent from Lambda");
return "Hello World";
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
this.springContext = applicationContext;
}
}