如何使用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,代码不使用它,只是为了让它能够运行
# 1 楼答案
你两者都用
而且
jdbc:postgresql
这让我觉得你不确定你实际使用的是什么数据库在复制各种教程之前,请查看AWS控制台,或与设置RDS数据库的人员交谈
其次,删除
maven-shade-plugin
的第二个定义一旦您知道您正在使用的数据库search for it's Maven dependencies
更重要的是,问题不在于RDS,而在于知道如何将类添加到类路径
现在还不清楚您正在运行什么jar文件(或者只是在Eclipse中运行代码),但是在
mvn clean package
之后,您必须在目标文件夹中运行更大的jar文件# 2 楼答案
ClassNotFound表示项目中没有适当的类(或库)
您应该为postgres或mysql驱动程序添加maven依赖项,并确保它们出现在类路径上
pom必须具有如下内容:
或