java - 带有批处理的 Spring Boot 应用程序在 Amazon AWS Lambda 环境中不起作用
问题描述
我的 spring 批处理启动应用程序是读取文件并插入到数据库中。我是 AWS Lambda 功能的新手,它们几乎没有可用资源。
当我在 AWS 上测试 jar 时,得到了ClassNotFoundException
.
@SpringBootApplication
@EnableAutoConfiguration
@EnableJpaRepositories("my.repository")
@ComponentScan("my.package")
@EnableScheduling
public class Main implements RequestHandler<KinesisEvent, String>{
@Autowired
JobLauncher launcher;
@Autowired
Job job;
public static void startApp(){
System.exit(SpringApplication
.exit(SpringApplication.run(Main.class)));
}
public class Handler implements RequestHandler<KinesisEvent, String> {
@Override
public String handleRequest(KinesisEvent input, Context context) {
context.getLogger().log("Input: " + input);
Main.startApp();
// TODO: implement your handler
return "Hello from Lambda";
}
My _build.gradle_:
dependencies {
compile 'org.springframework.batch:spring-batch-core:4.0.0.RELEASE'
compile 'org.springframework.boot:spring-boot-starter-batch:2.0.4.RELEASE'
compile 'org.springframework.boot:spring-boot-starter-data-
jpa:2.0.4.RELEASE'
compile 'com.microsoft.sqlserver:mssql-jdbc:6.1.0.jre8'
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.amazonaws:aws-lambda-java-core:1.2.0'
compile 'com.amazonaws:aws-lambda-java-events:2.1.0'
}
jar {
manifest{
baseName = "${projectName}"
version = ("${project.archiveVersion}")
}
}
task buildZip(type: Zip) {
from compileJava
from processResources
into('lib') {
from configurations.compileClasspath
}
}
build.dependsOn buildZip
Handler info on AWS Lambda-
my.package.Handler::handleRequest
Class not found: my.package.Handler:
java.lang.ClassNotFoundException
java.lang.ClassNotFoundException: my.package.Handler
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
解决方案
那是因为 gradle 依赖项不在您在 lambda 函数中部署的 jar 中。jar 需要注入所有依赖项 jar。
推荐阅读
- kubernetes - 为 K8s 服务重用负载均衡器
- eleventy - 如何使用 11ty 在 _data 子文件夹中为每个 json 文件生成一页?
- java - 使用 gson 在反序列化期间格式化嵌套对象中的 Double 值
- apache-flink - Flink CEP 在联合表上无法获得正确的结果
- c - C中的mv命令实现不将文件移动到不同的目录
- ssh - 错误的 sudo 密码 ansible
- php - 由于编码,PHP删除空格不起作用?
- jenkins - Jenkins Gerrit 触发器 - “/var/lib/jenkins/.ssh/id_rsa”不是有效的密钥文件
- python-3.x - 使用 Config Json 文件登录 Python
- laravel - 积分最高的用户列表