如何在Non Main方法中加载Spring Application Context

时间:2017-10-27 13:57:51

标签: spring-mvc spring-boot aws-lambda

我想在AWS lambda处理程序类中加载Spring初始上下文。这个类是我的应用程序的起点。我是以下面的方式做到的。

@SpringBootApplication
public class LambdaFunctionHandler implements RequestHandler<KinesisEvent, Object> {

@Override
  public Object handleRequest(KinesisEvent input, Context context) {
    AnnotationConfigApplicationContext appContext = new AnnotationConfigApplicationContext(LambdaFunctionHandler.class);
    LambdaFunctionHandler lambdaHandlerBean = appContext.getBean(LambdaFunctionHandler.class);
    // some business logic call
    return null;
  }

}

这工作正常,但是我在appContext上收到警告,它应该关闭,因为它是资源泄漏。这可以通过调用appContext.close()来解决,但我怀疑这种在非主方法中初始化Spring应用程序上下文的方式是否正确?在main方法中最常推荐的方法如下所示

SpringApplication app = new SpringApplication(LambdaFunctionHandler.class);
ConfigurableApplicationContext context = app.run(args);
LambdaFunctionHandler lambdaFunctionHandler = 
context.getBean(LambdaFunctionHandler.class);

但我没有在我的情况下替换args的价值。任何人都可以提出正确的做法

1 个答案:

答案 0 :(得分:0)

您可以使用@SpringBootApplication和main的main方法进行简单的类 使用CommandLineRunner加载AWS lambda处理程序。只需实现run来加载bean

  1. https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/CommandLineRunner.html