Reputation: 726
I am having an awful lot of trouble connecting to an RDS via Java for the first time. The full workflow is: Api-gateway method is invoked, calls the appropiate Lambda function (lambda in the aws sense), the lambda function connects to a Relational Database already running on AWS, and performs a query.
This is the big picture, currently I am having an awful lot of trouble configuring eclipse with maven with the right dependencies and configurations to connect to the database. I am following this guide. It even has simple code to try, which I do not manage to run succesfully.
My question would be: what do I need to put in my POM, what in my build path, and why would the code not even attempt a connection, and when I modify the code or use other examples I get errors such as "ClassNotFoundException: com.mysql.jdbc.Driver".
What is the proper way to configure the connection from java to the RDS?
Thank you in advance.
Example of code as seen in the tutorial:
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;
}
The biggest trouble came from that code not working at all, and the moment I remove the line " Class.forName("org.mysql.Driver");
Example of POM I am using. I have also tried adding the jdbc driver in different ways to my build path with no avail.
<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>
I also have the amazon plugin for eclipse and am running lambda functions from there, giving it a small json that the code does not use just so it can run.
Upvotes: 0
Views: 1546
Reputation: 191681
You're using both
Class.forName("org.mysql.Driver");
And jdbc:postgresql
which makes me think you're not sure what database you're actually using...
Go look at the AWS console, or talk to the the person who set up the RDS database before trying to copy various tutorials.
Secondly, remove the second definition for maven-shade-plugin
.
Once you know that database you are using search for it's Maven dependencies
More importantly, the issue is not RDS, it's just knowing how to add classes to the classpath
And it's not clear what jar file you're running (or just running code in Eclipse itself), but after mvn clean package
, you must run the larger JAR file in the target folder
Upvotes: 1
Reputation: 821
ClassNotFound means that you don't have the proper class (or library) into your project.
You should add the maven dependencies for postgres or mysql drivers and ensure that they appear on the classpath
The pom must have something like this:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.1</version>
</dependency>
Or
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
Upvotes: 0