将JDBC jar驱动程序添加到AWS Elastic Beanstalk作业的类路径中

时间:2017-02-03 17:34:48

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

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

platformBrowserDynamic().bootstrapModule(MyModule);

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

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,)

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

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

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

/.ebextensions

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

2 个答案:

答案 0 :(得分: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'
上面原始代码的

部分。这允许应用程序循环并成功找到必要的驱动程序。

答案 1 :(得分:0)

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

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

jdbc_driver_location = '/tmp/fmjdbc.jar'