0

我有一個Elastic Beanstalk應用程序,我嘗試通過JDBC將它連接到FileMaker Pro數據庫。我正在使用的代碼是:將JDBC jar驅動程序添加到AWS Elastic Beanstalk作業的類路徑

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 

但該項目仍然給出了錯誤。有關如何將此驅動程序添加到類路徑以使作業一致運行的任何想法?

+0

如果你能向我們展示變量內容(沒有用戶和密碼),這將有所幫助。你真的會遇到'XXXXX- bastian

+0

XXX在那裏隱藏有問題的數據庫的URL。問題中顯示完整的錯誤消息,因爲它在生產中出現。 – user2752159

+0

@bastian我已經更新了上面的問題。這個問題看起來類似於這個線程:https://answers.launchpad.net/jaydebeapi/+question/248738, 在程序可以連接的時候我手動輸入JAVA_HOME命令,但是驅動程序並沒有「粘住」之後一段不活動的時期。 不幸的是,上面鏈接的票據似乎沒有解決。 – user2752159

回答

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' 

部分。這允許應用程序循環併成功找到必要的驅動程序。

0

JAVA_HOME應該指向服務器上安裝Java的位置。您不使用JAVA_HOME將庫添加到類路徑。你不應該爲你的代碼設置任何環境變量。

問題的根源在於您將文件複製到/tmp/fmjdbc.jar,但您將jdbc_driver_location設置爲/tmp/jdbc.jar。注意這些文件名是如何不同的。要解決你的代碼改變是這樣:

jdbc_driver_location = '/tmp/fmjdbc.jar' 
+0

不好意思!當我寫出問題時,這只是一個錯字。變量'jdbc_driver_location'正確設置爲''/ tmp/fmjdbc.jar',問題依然存在。 – user2752159

+0

任何想法會導致問題,因爲變量問題是一個錯字?再次,代碼將在第一次啓動時運行,但在隨後的嘗試中「沒有合適的驅動程序發現」錯誤仍然存​​在。 – user2752159