【问题标题】:Adding JDBC jar driver to classpath for AWS Elastic Beanstalk job将 JDBC jar 驱动程序添加到 AWS Elastic Beanstalk 作业的类路径
【发布时间】:2025-11-29 07:25:01
【问题描述】:

我有一个 Elastic Beanstalk 应用程序,我尝试将其配置为通过 JDBC 连接到 FileMaker Pro 数据库。我使用的代码是:

import jaydebeapi as jdp

jdbc_driver_location = '/tmp/fmjdbc.jar'

conn = jdb.connect(jdbc_driver_class,
                   jdbc_connection_type + '://' + db_url + '/' + db_name,
                   [user_name, password], jdbc_driver_location,)

当我尝试这样做时,我收到以下错误:

java.sql.SQLException: No suitable driver found for jdbc:filemaker://10.120.120.108/carecord-<class 'jpype._jexception.java.sql.SQLExceptionPyRaisable'>

为了尝试解决问题,我已将 jdbc.jar 添加到 Ec2 实例的 /tmp 文件夹中,并将其包含在项目目录中。如果我 SSH 进入 EC2 实例并发出命令:

JAVA_HOME=/tmp/fmjdbc.jar

程序将在下次出现提示时运行,没有问题。几个小时后它会给出原始错误,需要再次发出上述命令才能工作。为了解决这个问题,我尝试将以下内容添加到 /.ebextensions,将 .jar 从项目目录复制到 tmp 文件夹中,然后从一开始就向服务器发出上述命令:

commands:
  command01:
    command: sudo cp /opt/python/current/app/fmjdbc.jar /tmp/fmjdbc.jar
  command02:
    command: JAVA_HOME=/tmp/fmjdbc.jar

但该项目仍然给出错误。关于如何将此驱动程序添加到类路径以使作业持续运行的任何想法?

【问题讨论】:

  • 如果您能向我们展示变量内容(无需用户名和密码),将会有所帮助。你真的收到XXXXX-&lt;class 错误吗?
  • XXX 是为了隐藏相关数据库的 URL。完整的错误消息现在显示在问题中,因为它出现在生产中。
  • @bastian 我已经更新了上面的问题。这个问题似乎与这个线程相似:answers.launchpad.net/jaydebeapi/+question/248738,在程序中我手动输入 JAVA_HOME 命令时可以连接,但驱动程序在一段时间不活动后没有“粘住”。不幸的是,上面链接的票似乎没有得到解决。

标签: amazon-web-services jdbc amazon-ec2 amazon-elastic-beanstalk jaydebeapi


【解决方案1】:

为了帮助以后遇到这个问题的人,我找到的答案在this thread的末尾。

我附加了以下内容:

if jpype.isJVMStarted() and not jpype.isThreadAttachedToJVM():
    jpype.attachThreadToJVM()
    jpype.java.lang.Thread.currentThread().setContextClassLoader(jpype.java.lang.ClassLoader.getSystemClassLoader())

就在上面

jdbc_driver_location = '/tmp/fmjdbc.jar'

上面我的原始代码部分。这允许应用程序循环并成功找到必要的驱动程序。

【讨论】:

    【解决方案2】:

    JAVA_HOME 应该指向服务器上安装 Java 的位置。您不使用 JAVA_HOME 将库添加到类路径。您不必为代码工作设置任何环境变量。

    问题的根源在于您将文件复制到/tmp/fmjdbc.jar,但您将jdbc_driver_location 设置为/tmp/jdbc.jar。注意这些文件名是如何不同的。要修复您的代码,请将其更改为:

    jdbc_driver_location = '/tmp/fmjdbc.jar'
    

    【讨论】:

    • 很抱歉给您带来了困惑!当我写出问题时,这只是一个错字。变量jdbc_driver_location 正确设置为'/tmp/fmjdbc.jar',问题依然存在。
    • 鉴于变量问题是一个错字,知道什么会导致问题吗?同样,代码将在第一次启动时运行,但 no suitable driver found 错误在后续尝试中仍然存在。
    最近更新 更多