Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当使用spring云函数AWS适配器运行AWS lambda函数时,spring不会注入(自动连接)组件bean_Spring_Amazon Web Services_Aws Lambda_Amazon Kinesis_Spring Cloud Function - Fatal编程技术网

当使用spring云函数AWS适配器运行AWS lambda函数时,spring不会注入(自动连接)组件bean

当使用spring云函数AWS适配器运行AWS lambda函数时,spring不会注入(自动连接)组件bean,spring,amazon-web-services,aws-lambda,amazon-kinesis,spring-cloud-function,Spring,Amazon Web Services,Aws Lambda,Amazon Kinesis,Spring Cloud Function,我正在使用Spring云函数AWS适配器SpringBootRequestHandler实现AWS lambda函数创建处理程序。调用了在GenericaApplicationContext中注册的函数bean,但组件类的自动关联给出了NullPointer异常 我在Spring应用程序中尝试了@ComponentScan基本包 应用程序类别: @Slf4j @SpringBoot应用程序 @组件扫描({“com.poc.evthub”}) @EnableConfigurationPropert

我正在使用Spring云函数AWS适配器SpringBootRequestHandler实现AWS lambda函数创建处理程序。调用了在GenericaApplicationContext中注册的函数bean,但组件类的自动关联给出了NullPointer异常

我在Spring应用程序中尝试了@ComponentScan基本包

应用程序类别:

@Slf4j
@SpringBoot应用程序
@组件扫描({“com.poc.evthub”})
@EnableConfigurationProperties(EventHubProperties.class)
公共类EventHubServerlessApplication实现ApplicationContextInitializer{
公共事件hubserverlessApplication(){
}
公共静态void main(字符串[]args)引发异常{
FunctionalSpringApplication.run(EventHubServerlessApplication.class,args);
}
@豆子
公共运动事件函数ingestEvents(){
返回新的kinisevent函数();
}
@凌驾
公共void初始化(GenericaApplicationContext上下文){
log.debug(“=============initialize=============”);
registerBean(“ingestEvents”,FunctionRegistration.class,
()->新函数注册(ingestEvents())
.type(FunctionType.from(KinesisEvent.class).to(ApiResponse.class.getType());
}
}
处理程序:

公共类kiniseventhandler扩展了SpringBootRequestHandler{
}
功能Bean:

package com.poc.evthub.function;
导入com.amazonaws.services.lambda.runtime.events.kinisevent;
导入com.poc.evthub.beans.ApiResponse;
导入com.poc.evthub.constant.Constants;
导入com.poc.evthub.service.IngestionServiceFactory;
导入lombok.extern.slf4j.slf4j;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Component;
导入java.util.function.function;
@Slf4j
@组成部分
公共类kinisevent函数实现函数{
私有上下文=null;
@自动连线
私人摄食服务工厂摄食服务工厂;
@自动连线
@限定符(“targetExecutionContext”)
公共void setContext(上下文){
log.info(“上下文:{}”,上下文);
this.context=上下文;
}
@凌驾
公共API响应适用(最终动静事件动静事件){
log.info(“调用了KinesisEventFunction应用…”);
字符串sourceDomain=System.getenv(Constants.SYSENV.SOURCE\u DOMAIN);
info(“源域={}”,sourceDomain);
if(null==kinisevent | | null==kinisevent.getRecords()){
错误(“事件不包含任何数据,{}”,System.lineSeparator());
//找不到TODO生成响应
返回null;
}
其他的
log.info(“从{}.{}收到{}条记录”,
kinesisEvent.getRecords().size(),
KinesEvent.getRecords().get(0.getEventSourceARN(),
System.lineSeparator());
info(“InjectionServiceFactory={}”,InjectionServiceFactory);
InjectionServiceFactory.Injection();
返回null;
}
}
完整的代码和pom上传至:

已调用KinesEvent函数应用。。。 还能够从lambda读取环境值(source_domain),并接收Kinesis事件记录

但是@Autowired InjectionServiceFactory为空。我正在注入这个组件bean来委托业务逻辑

这里遗漏了什么,所以spring无法注入这个组件bean


提前谢谢

您可以尝试通过构造函数或setter注入将
InjectionServiceFactory
bean手动注入到函数类中

在函数类中,添加构造函数并从
IngestionServiceFactory
字段中删除
@Autowired
,如:

...
public class KinesisEventFunction implements Function<KinesisEvent, ApiResponse> {

...
    // No @Autowired here...
    private final IngestionServiceFactory ingestionServiceFactory;
...
    // The new constructor here...
    public KinesisEventFunction(final IngestionServiceFactory pIngestionServiceFactory) {
        this.ingestionServiceFactory = pIngestionServiceFactory;
    }
...

}

请让我知道它是否有效

您可以尝试通过构造函数或setter注入将
InjectionServiceFactory
bean手动注入到函数类中

在函数类中,添加构造函数并从
IngestionServiceFactory
字段中删除
@Autowired
,如:

...
public class KinesisEventFunction implements Function<KinesisEvent, ApiResponse> {

...
    // No @Autowired here...
    private final IngestionServiceFactory ingestionServiceFactory;
...
    // The new constructor here...
    public KinesisEventFunction(final IngestionServiceFactory pIngestionServiceFactory) {
        this.ingestionServiceFactory = pIngestionServiceFactory;
    }
...

}

请让我知道它是否有效

我怀疑
@ComponentScan
。不确定它包括
com.poc.evthub.service
。谢谢。如果我没有将函数注册为Functional bean并且没有实现ApplicationContextInitializer,那么组件不会有问题,组件是自动连接的。如果它作为SpringApplication运行,而不是FunctionalSpringApplication和未实现ApplicationContextInitializer,则工作正常。公共静态void main(字符串[]args)引发异常{SpringApplication.run(EventHubServerlessApplication.class,args);}。我怀疑
@ComponentScan
。不确定它包括
com.poc.evthub.service
。谢谢。如果我没有将函数注册为Functional bean并且没有实现ApplicationContextInitializer,那么组件不会有问题,组件是自动连接的。如果它作为SpringApplication运行,而不是FunctionalSpringApplication和未实现ApplicationContextInitializer,则工作正常。publicstaticvoidmain(String[]args)抛出异常{SpringApplication.run(EventHubServerlessApplication.class,args);}不是OP,但我的情况基本相同,setter injected
InjectionServiceFactory
对我来说是null。关于发生了什么,有什么线索吗?不是OP,但我的情况基本相同,setter injected
InjectionServiceFactory
对我来说是空的。关于发生了什么有什么线索吗?
...
public class EventHubServerlessApplication implements ApplicationContextInitializer<GenericApplicationContext> {

...
    @Autowired
    private IngestionServiceFactory ingestionServiceFactory;
...
    @Override
    public void initialize(GenericApplicationContext context) {

        log.debug("========  initialize  ========");

        context.registerBean("ingestEvents", FunctionRegistration.class,
                () -> new FunctionRegistration<>(new KinesisEventFunction(this.ingestionServiceFactory))
                        .type(FunctionType.from(KinesisEvent.class).to(ApiResponse.class).getType()));
    }
}