未找到适合jdbc的驱动程序:红移:

未找到适合jdbc的驱动程序:红移:,jdbc,aws-lambda,amazon-redshift,Jdbc,Aws Lambda,Amazon Redshift,我正试图使用com.amazon.redshift.jdbc.Driver连接到我的红移数据库,我编写了一个简单的类,该类连接到数据库并执行select查询。我已经创建了一个简单的gradle项目,它创建了胖罐子 当我在本地机器上运行时,一切正常。但当我将其部署到AWS Lambda中时,它给出了以下错误 { "errorMessage": "No suitable driver found for jdbc:redshift://xyz/xyz", "errorType": "java.sql

我正试图使用
com.amazon.redshift.jdbc.Driver
连接到我的红移数据库,我编写了一个简单的类,该类连接到数据库并执行select查询。我已经创建了一个简单的gradle项目,它创建了胖罐子

当我在本地机器上运行时,一切正常。但当我将其部署到AWS Lambda中时,它给出了以下错误

{
"errorMessage": "No suitable driver found for jdbc:redshift://xyz/xyz",
"errorType": "java.sql.SQLException",
"stackTrace": [
    "java.sql.DriverManager.getConnection(DriverManager.java:689)",
    "java.sql.DriverManager.getConnection(DriverManager.java:208)",
    "test.DatabaseConnector.grab(DatabaseConnector.kt:204)",
"test.DatabaseConnector.generateHTMLReport(DatabaseConnector.kt:271)",
"test.DatabaseConnector.sendReport(DatabaseConnector.kt:606)",
"test.HelloWorldLambda.runReport(HelloWorldLambda.kt:15)",
"sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)"
   ]
   }
我不知道为什么同一个罐子在本地工作,而不是在AWS lambda。下面是代码

    Class.forName(driverName)
    val connection = DriverManager.getConnection(url, 
    Properties().apply {
        setProperty("user", username)
        setProperty("password", password)
    })
    val stmt = connection.createStatement()
    val rs = stmt.executeQuery(query)

    while (rs.next()) {
       println(rs.getString("name"))
    }

    rs.close()
    stmt.close()
    connection.close()

有人能帮忙解决这个问题吗?

如果您使用Maven,请确保使用
redshift-jdbc42-no-awssdk
。而且,很明显在1.2.10.1009版本中有一个bug,看

唯一有效的版本似乎是“1.2.8.1005”,这是Maven存储库中最古老的可用版本

您需要做的另一件事是确保您的jar文件需要是一个所谓的“胖jar”,它将包含应用程序的所有依赖项

您可以使用
maven assembly plugin
作为打包生命周期来制作胖罐:

    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4.1</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>Handler</mainClass>
                    </manifest>
                </archive>

            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

org.apache.maven.plugins
maven汇编插件
2.4.1
带有依赖项的jar
处理者
组装
包裹
单一的

我在一个ECS任务中遇到了这个错误,驱动程序已经捆绑在jar中,它是一个spring boot应用程序。容器在dev机器上正常工作,但在ECS中失败@Ali Niaki上面的回答很有帮助,我尝试更改版本号,但没有降级,而是升级到了新版本


AWS似乎没有使用发布版本更新文档。因此,使用他们的存储库:从他们的文档中,找到最新版本并使用它。在撰写本文时,在ECS中工作的最新版本是“redshift-jdbc42-1.2.18.1036”。AWS redshift文档仍然提到:“1.2.10.1009”,这导致了一些问题。

到目前为止,提供的链接已经失效。有趣的是,他们的文档()仍然指向同一个存储库链接。