【发布时间】:2023-02-14 04:42:24
【问题描述】:
我正在尝试测试 lambda 函数(Spring Boot 云应用程序),但得到 java.lang.ClassNotFoundException,即使在 runtime 设置下正确提到了流处理程序。
错误信息:
{
"errorMessage": "Class not found: com.myexample.handler.ServiceHandler",
"errorType": "java.lang.ClassNotFoundException"
}
这是流处理程序代码:
package com.myexample.handler;
@Slf4j
@Component
public class ServiceHandler implements RequestHandler<String,Object> {
@Autowired
MyService myService ;
@Override
public Object handleRequest(String s, Context context) {
// myService.executeMethod();
}
我在 build the jar with all dependencies 上使用 Maven Shade 插件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>aws</shadedClassifierName>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
<resource>META-INF/spring.factories</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
为此,在我的项目中添加了其他重要的 Maven 依赖项(除了常规的 Spring Boot 依赖项):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-adapter-aws</artifactId>
<version>3.2.5</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>3.11.0</version>
</dependency>
这里需要注意的几件事是:我在 ServiceHandler 类中使用 @Component 注释。我必须这样做,因为我需要自动装配该服务。
我没有看到 lambda 端和代码有任何问题。这里出了什么问题?
【问题讨论】:
-
您是否尝试使用 AWS Lambda Java Run time API 构建 Lambda 函数并尝试从 AWS Lambda 函数中使用 Spring BOOT API?根本不需要使用 Spring BOOT API 来使用 Java 构建 Lambda 函数,也不需要在 AWS Lambda 函数的逻辑中使用 @Component 这样的注释。
标签: spring amazon-web-services spring-boot maven aws-lambda