找不到适用于jdbc:redshift的驱动程序:

时间:2018-08-03 04:18:50

标签: jdbc aws-lambda amazon-redshift

我试图使用from PyPDF2 import PdfFileReader import tkinter as tk from tkinter import filedialog root = tk.Tk() label_list = [] def get_info(path): with open(path, 'rb') as f: pdf = PdfFileReader(f) info = pdf.getDocumentInfo() label_list[0].config(text=pdf.getNumPages()) label_list[1].config(text=info.author) label_list[2].config(text=info.creator) label_list[3].config(text=info.producer) label_list[4].config(text=info.subject) label_list[5].config(text=info.title) def browsefunc(): filename = filedialog.askopenfilename() pathlabel.config(text=filename) get_info(filename) browsebutton = tk.Button(root, text="Browse", command=browsefunc) browsebutton.pack() pathlabel = tk.Label(root) pathlabel.pack() for i in range(6): label_list.append(tk.Label(root, text="")) label_list[i].pack() root.mainloop() 连接到我的redshift数据库,我编写了一个简单的类,该类连接到数据库并执行选择查询。我创建了一个简单的gradle项目,该项目创建了胖子罐。

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

com.amazon.redshift.jdbc.Driver

我不确定为什么同一个jar在本地而不在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)"
   ]
   }

有人可以帮助解决此问题吗?

2 个答案:

答案 0 :(得分:2)

如果您使用的是Maven,请确保使用redshift-jdbc42-no-awssdk。另外,显然在特定的1.2.10.1009版本中存在一个错误,请查看here

唯一可行的版本似乎是“ 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>

答案 1 :(得分:1)

我在ECS任务中遇到此错误,驱动程序已经捆绑在jar中,它是一个Spring Boot应用程序。容器在开发机器上运行正常,但在ECS中失败。事实证明,@ Ali Niaki的回答很有帮助,我尝试更改版本号,但我没有降级,而是升级到了较新的版本。

AWS似乎没有使文档保持发行版本的更新。因此,请使用其文档中的存储库:http://redshift-maven-repository.s3-website-us-east-1.amazonaws.com/release,找到最新版本并改用它。在撰写本文时,ECS中正在运行的最新版本是“ redshift-jdbc42-1.2.18.1036”。 AWS redshift文档仍然提到:'1.2.10.1009',这引起了问题。