【问题标题】:Injecting a service in a springboot aws lambda在 springboot aws lambda 中注入服务
【发布时间】:2018-10-31 03:49:00
【问题描述】:

我正在构建一个基于 lambda 的 on this code

uppercaseService 是这样“注入”的:

@Component("uppercaseFunction")
public class UppercaseFunction implements Function<UppercaseRequest, UppercaseResponse> {

private final UppercaseService uppercaseService;

public UppercaseFunction(final UppercaseService uppercaseService) {
    this.uppercaseService = uppercaseService;
}

这工作正常,直到我尝试在 UppercaseService 中注入另一个服务。

@Service
public class UppercaseService {

    @Autowired
    MyService myService;

    public String uppercase(final String input) {
        myService.doSomething();
        return input.toUpperCase(Locale.ENGLISH);
    }
}

AWS 控制台返回:

"errorMessage": "创建名为 'uppercaseService' 的 bean 时出错: 通过字段 'myService' 表达的不满足的依赖关系

此服务在非 lambda 上下文中工作。该类存在于使用 maven 包构建的 .jar 中。

我尝试了@https://www.profit4cloud.nl/blog/just-spring-enabled-aws-lambdas的解决方案,但没有成功。

【问题讨论】:

  • 你在哪里创建MyService类型的bean?
  • @MạnhQuyếtNguyễn 它来自外部 springboot 项目。

标签: java spring amazon-web-services spring-boot aws-lambda


【解决方案1】:

你必须先初始化你的MyService bean。由于您的 MyService 来自外部服务,因此很可能与您自己的软件包有不同的软件包

直接:

@SpringBootApplication
public class UpperFunctionApplication {

    @Bean
    public MyService myService() {
       return new MyService(); // You must provide code to construct new MyService bean
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(UpperFunctionApplication.class, args);
    }
}

或通过组件扫描:

@SpringBootApplication(scanBasePackageClasses = {UpperFunctionApplication.class, MyService.class})
public class UpperFunctionApplication {

    @Bean
    public MyService myService() {
       return new MyService(); // You must provide code to construct new MyService bean
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(UpperFunctionApplication.class, args);
    }
}

【讨论】:

  • 好的,它通过了 bean 注册但我得到一个 java.lang.IllegalStateException: No function defined 错误现在(并且项目在没有服务注入的情况下工作)
  • 因为你对你的MyService 有一个神话,所以我帮不了你。您必须在库中正确初始化 MyService 及其所有依赖 bean 才能使其完全正常工作。
  • 作为记录,我需要删除 @ComponentScan 因为它导致“未定义函数”错误。然后要使用这个答案中声明的 bean,我需要一个额外的 MyService myService = myService();
猜你喜欢
  • 2018-11-04
  • 2021-06-15
  • 2021-06-09
  • 2015-04-20
  • 2021-03-07
  • 2020-03-12
  • 2019-05-22
  • 2017-07-28
  • 2020-07-02
相关资源
最近更新 更多