2017-03-28 17 views
0

Amazon Lambdaに簡単なSpringブートプロジェクトをアップロードしましたが、現在テストしようとしています。 それは100%に動作しますが、私は春の豆 を注入しようとすると、私はここに私のコードは、私は、次のAWS Lambda - Spring起動ハンドラでSpring Beanを挿入

com.test.services.lambda.MyLambdaFunctionHandler::handleRequest 
するアマゾンラムダにハンドラを設定

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"; 
    } 
} 

LambdaHandlerためであるNULLポインタを取得します私はこの機能をテストするとき

は、しかし - 私は春の豆を注入

{ 
    "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)" 
    ] 
} 

は、それが失敗しているこのエラーメッセージが表示されますAWS Lambda HandlerにSpring Beanを注入する方法についてアドバイスをいただけますか?

これにどのような援助を大幅にApplicationContextを注入するためのいくつかの方法があります

おかげ ダミアン

答えて

1

をいただければ幸いです。

豆があなたの豆を管理する限り、あなたはうまくいくはずです。 @ConfigurationファイルのMyLambdaFunctionHandler@Beanと宣言しましたか?

@Configuration以外で初期化するためにnew MyLambdaFunctionHandler()を使用しましたか? (これは春があなたのbeanを管理していないことを意味します)。

春があなたの豆を管理していない場合、それに豆を入れることはできません。

そうでない場合は、@Componentと注釈を付けて、@ComponentScanでスキャンする必要があります。

宣言されている場合は、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; 
    } 
} 
関連する問題