我第一次通过 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,而在于知道如何将类添加到类路径
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver in Eclipse
- java, class not found exception com.mysql.jdbc.Driver
- Connect Java to a MySQL database
- How do you add PostgreSQL Driver as a dependency in Maven?
并且不清楚您正在运行什么 jar 文件(或者只是在 Eclipse 本身中运行代码),但是在 mvn clean package
之后,您必须在目标文件夹中运行更大的 JAR 文件
关于java - 如何使用 Eclipse 和 Maven 配置 Java 项目以连接到 Amazon RDS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49005350/