java - 如何使用 Eclipse 和 Maven 配置 Java 项目以连接到 Amazon RDS

标签 java maven jdbc amazon-rds

我第一次通过 Java 连接到 RDS 时遇到了很多麻烦。完整的工作流程是:调用 Api 网关方法,调用适当的 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,代码不使用它,以便它可以运行。

最佳答案

您正在使用两者

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 文件

关于java - 如何使用 Eclipse 和 Maven 配置 Java 项目以连接到 Amazon RDS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49005350/

相关文章:

java - 使用 Java 命令行和 Mysqldump 创建 MySQL 数据库备份时出错

java - 在 Maven 中可以使用哪些选项来模拟 "sbt run"?

带有 Gradle 的 POM 中缺少 Android 库依赖项

java - 当我运行/调试文件的 main() 时,如何在 IntelliJ 中使用 SQLServerDriver?

java - 从 ile RPG 中调用 Java set 和 get 方法

java - 如何让flatMap在后台线程执行

maven - Spring Boot 的 application.properties 中没有明文密码

java - SQL 类型说明符

java - JDBC 调用 Microsoft SQL Server 存储过程的同义词

java - 如何使 CXF 日志记录功能与 SOAP 消息一起使用?