Приложение Spring Boot с пакетной обработкой не работает в среде Amazon AWS Lambda - PullRequest
0 голосов
/ 02 октября 2018

Моё приложение весенней пакетной загрузки читает файл и вставляет его в базу данных.Я новичок в функциональности AWS Lambda, их очень мало или нет доступных ресурсов.

Когда я тестирую банку на AWS lambda, получается 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)

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Я рекомендую использовать плагин Spring Boot gradle для создания исполняемого файла jar со всеми включенными зависимостями.

Затем вы можете создать функцию AWS Lambda, которая запускает этот файл jar с java -jar mybatchjob.jar.

Надеюсь, это поможет.

0 голосов
/ 02 октября 2018

Это связано с отсутствием зависимостей в банке, которую вы развернули в функции Lambda.создайте один Jar со всеми зависимостями и повторно разверните его еще раз

Нет необходимости изменять информацию обработчика: my.package.Handler :: handleRequest

0 голосов
/ 02 октября 2018

Это потому, что зависимости gradle находятся не в банке, которую вы развертываете в лямбда-функции.В банке должны быть введены все банки зависимостей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...