有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用Eclipse和Maven配置Java项目以连接到AmazonRDS

我第一次通过Java连接RDS时遇到了很多麻烦。完整的工作流程是:调用Api网关方法,调用appropiate Lambda函数(aws意义上的Lambda),Lambda函数连接到已经在aws上运行的关系数据库,并执行查询

这是一个大问题,目前我在用maven配置eclipse时遇到了很多麻烦,因为它具有连接到数据库的正确依赖项和配置。我正在跟踪this guide。它甚至有简单的代码可供尝试,但我无法成功运行

我的问题是:我需要在POM中放什么,在构建路径中放什么,为什么代码甚至不尝试连接,当我修改代码或使用other examples时,我会出现错误,比如“ClassNotFoundException:com.mysql.jdbc.Driver”

配置从java到RDS的连接的正确方法是什么

先谢谢你

教程中所示的代码示例:

private static Connection getRemoteConnection() {
    if (System.getenv("RDS_HOSTNAME") != null) {
      try {
      Class.forName("org.mysql.Driver");
      String dbName = System.getenv("RDS_DB_NAME");
      String userName = System.getenv("RDS_USERNAME");
      String password = System.getenv("RDS_PASSWORD");
      String hostname = System.getenv("RDS_HOSTNAME");
      String port = System.getenv("RDS_PORT");
      String jdbcUrl = "jdbc:mysql://" + hostname + ":" + port + "/" + dbName + "?user=" + userName + "&password=" + password;
      logger.trace("Getting remote connection with connection string from environment variables.");
      Connection con = DriverManager.getConnection(jdbcUrl);
      logger.info("Remote connection successful.");
      return con;
    }
    catch (ClassNotFoundException e) { logger.warn(e.toString());}
    catch (SQLException e) { logger.warn(e.toString());}
    }
    return null;
  }

最大的问题是代码根本不工作,当我删除行“Class.forName”(“org.mysql.Driver”)

我正在使用的POM示例。我还尝试过以不同的方式将jdbc驱动程序添加到构建路径中,但没有成功

<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.lambda</groupId>
    <artifactId>demo</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <testFailureIgnore>true</testFailureIgnore>
                </configuration>
            </plugin>
            <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>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.amazonaws</groupId>
                <artifactId>aws-java-sdk-bom</artifactId>
                <version>1.11.277</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>
    </dependencies>
</project>

我还有用于eclipse的amazon插件,并且正在运行lambda函数,为它提供了一个小的json,代码不使用它,只是为了让它能够运行


共 (2) 个答案

  1. # 1 楼答案

    你两者都用

    Class.forName("org.mysql.Driver");
    

    而且jdbc:postgresql这让我觉得你不确定你实际使用的是什么数据库

    在复制各种教程之前,请查看AWS控制台,或与设置RDS数据库的人员交谈

    其次,删除maven-shade-plugin的第二个定义

    一旦您知道您正在使用的数据库search for it's Maven dependencies

    更重要的是,问题不在于RDS,而在于知道如何将类添加到类路径

    现在还不清楚您正在运行什么jar文件(或者只是在Eclipse中运行代码),但是在mvn clean package之后,您必须在目标文件夹中运行更大的jar文件

  2. # 2 楼答案

    ClassNotFound表示项目中没有适当的类(或库)

    您应该为postgres或mysql驱动程序添加maven依赖项,并确保它们出现在类路径上

    pom必须具有如下内容:

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.2.1</version>
    </dependency>
    

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.6</version>
    </dependency>