AWS Ламда дает исключение класса не найдено для jdb c и org. json JARS - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь запустить функцию AWS Lamda с помощью Eclipse и Maven, используя набор инструментов AWS. Когда я запускаю проект как тест Maven, он успешно запускается. Но когда я экспортирую проект как .jar и загружаю jar в AWS Lamda, он дает мне следующую трассировку ошибки:

Input: ToRupeeDatabase error: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Done inserting the data in RDS

Код говорит, что он работает успешно, и данные были вставлены в RDS, но оно перехватывается как исключение, и код сбоя.

Код:

package com.amazonaws.torupee.demo;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.HashSet;

import java.util.logging.Level;
import java.util.logging.Logger;

public class RemoteDataCRON implements RequestHandler<Object, String> {

 @Override
    public String handleRequest(Object input, Context context) {
        context.getLogger().log("Input: " + input);

        try {                
            // Exception in the following line when uploaded on AWS Lamda!
            Class.forName("com.mysql.jdbc.Driver");
            String endPoint = "pathtodatabase?useSSL=false";
            String username = "foor";
            String password = "bar";
            PreparedStatement stmt = null;               
            try {
                Connection dbConnection = DriverManager.getConnection(endPoint, username, password);                    
            } catch (SQLException ex) {
                Logger.getLogger(RemoteDataCRON.class.getName()).log(Level.SEVERE, null, ex);
            }
            // Some processing here and org.json exception here!
        } catch (Exception ex) {
            System.err.println("Database error: " + ex);
        }
        System.out.println("Done inserting the data in RDS");

        // TODO: implement your handler
        return "Hello from Lambda!";
    }

}

.pom файл:

<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">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.amazonaws.torupee</groupId>
  <artifactId>demo</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <encoding>UTF-8</encoding>
          <forceJavacCompilerUse>true</forceJavacCompilerUse>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-bom</artifactId>
        <version>1.11.256</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-events</artifactId>
      <version>1.3.0</version>
    </dependency>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-core</artifactId>
      <version>1.1.0</version>
    </dependency>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180130</version>
</dependency>
  </dependencies>
</project>

Вот Список решений, которые я попробовал:

1) Я попытался добавить внешние JARS для mysql и org. json, но это дало мне те же ошибки
2) Я попытался сжать проект вместо экспорта это как JAR, но это дало мне ClassNotFoundException для самого обработчика
3) Затем я добавил зависимости в сам файл pom, так как думал, что внешние JARS не были связаны при создании файла .jar
4) Затем я изменил путь к драйверу с "com. mysql .jdb c .Driver" на "com. mysql .cj.jdb c .Driver", но это все равно дало мне исключение на консоли

Я делаю что-то не так или неправильно строю флягу? y Ламда выдает ошибку, когда я на консоли управления?

...