繁体   English   中英

AWS Lambda 与 Java Spring

[英]AWS Lambda with Java Spring

我正在尝试使用 Java Spring 实施 AWS Lambda 服务。 我经历了一大堆教程,这些教程告诉了我一大堆方法,但我无法让它工作。

我遇到的主要问题是 AWS Lambda 库要求类具有零参数构造函数,这使得使用 Spring IOC 容器变得困难。 我找到了一个教程,它有一个解决方法,并且能够在创建后将我的 Spring bean 注入到 class 中,但这种方法似乎不适用于从定义的接口创建的匿名类的 bean 实例化(例如 Z38008DD81C2F4D7985CEF16C数据库存储库)这是我的应用程序使用的东西。

我找到了有关 AWS lambda 库的 Spring 包装器的教程,但这似乎也不起作用; 我想我已经或多或少地从他们的示例代码中正确地复制了他们的代码,但是当我在 Lambda 上运行它时,我收到以下错误:

 START RequestId: d9e62756-e72b-45f0-8df4-2164f3979dd7 Version: $LATEST Failed to discover main class. An attempt was made to discover main class as 'MAIN_CLASS' environment variable, system property as well as entry in META-INF/MANIFEST.MF (in that order).: java.lang.IllegalStateException java.lang.IllegalStateException: Failed to discover main class. An attempt was made to discover main class as 'MAIN_CLASS' environment variable, system property as well as entry in META-INF/MANIFEST.MF (in that order). at org.springframework.cloud.function.utils.FunctionClassUtils.getStartClass(FunctionClassUtils.java:83) at org.springframework.cloud.function.utils.FunctionClassUtils.getStartClass(FunctionClassUtils.java:60) at org.springframework.cloud.function.adapter.aws.FunctionInvoker.start(FunctionInvoker.java:104) at org.springframework.cloud.function.adapter.aws.FunctionInvoker.<init>(FunctionInvoker.java:70) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

这是我的代码:

pom.xml

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.2.4.RELEASE</version> <relativePath/> <.-- lookup parent from repository --> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>JobsTest</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-function-adapter-aws</artifactId> <version>3.0.2.RELEASE</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-events</artifactId> <version>2.0.2</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> <shadedArtifactAttached>true</shadedArtifactAttached> <shadedClassifierName>aws</shadedClassifierName> </configuration> </plugin> </plugins> </build> </project>

JobTestApplication.java(我用来尝试让这个该死的东西工作的示例 PoC 应用程序,然后我将一一添加更多高级功能):

 package jobtest; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import java.util.function.Function; @SpringBootApplication public class JobTestApplication { public static void main(String[] args) { SpringApplication.run(JobTestApplication.class, args); } @Bean public Function<Object, String> uppercase() { return input -> "Hello World;" } }

有人可以向我解释我做错了什么吗? 我已经花了 2 天半的时间来解决这个问题,但我无法弄清楚。 谢谢。

我遇到了同样的问题。 根据此链接, https://github.com/spring-cloud/spring-cloud-function/issues/439 , Spring Cloud Function 版本 3 可以解决您的问题。

aws lambda 更新功能配置--功能名称 testFunction--环境“变量={MAIN_CLASS=path.to.mainClass}”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM