2017-02-14 56 views
1

我想在tomcat7中部署一個war文件。我正在使用MySQL JDBC驅動程序連接到數據庫服務器。 MySQL JDBC驅動程序的jar文件被複制到$CATALINA_HOME/lib/目錄,並且Web應用程序正常工作。如何在tomcat7和JDBC jar中部署.war文件?

現在,我想在Amazon Elastic BeanStalk服務中部署.war文件。默認情況下,默認情況下,Amazon不會將MySQL JDBC驅動程序放置在$CATALINA_HOME/lib目錄中,而且我無法運行腳本,該腳本將ssh放入每個實例並將jar下載到目錄中。

有沒有什麼辦法,我可以將jar文件打包爲JDBC驅動程序,這樣我就不必下載並將該jar文件放在$CATALINA_HOME/lib目錄中了?

+0

如果Tomcat沒有運行其他任何東西,是否可以將jdbc驅動程序放入WAR文件中? –

+0

是的,Tomcat不會運行其他任何東西。我只是在Tomcat中部署一個war文件。 –

+1

然後在你的戰爭文件中加入驅動程序。由於您的部署是獨立的,因此很可能會讓您的日常工作更輕鬆。 –

回答

1

不,你不能捆綁JDBC罐子Tomcat7:

我有這個問題,這是一個噩夢調試。在我的試驗和文檔中,您不能將JDBC驅動程序打包到WAR文件中。或者至少可以,但類加載器將忽略不在Tomcat Lib文件夾中的JDBC類。它在文檔的Mysql的部分第一段這裏 - >Tomcat7-JDBC我不知道Tomcat8或Tomcat9公測...

短期的解決辦法

我要做的就是你說的到底是什麼你不想做和Mark B的解決方案類似。我使用一個腳本來從s3複製它,但這非常簡單,如果使用aws s3 cp命令,則只有一行bash。 aws s3工具安裝在您的應用程序將運行的EC2實例上。

aws s3 cp s3://mybucket/mysql.jar /usr/share/tomcat7/lib/mysql.jar 

*您將需要重新啓動Tomcat的另一個原因,你應該看到長遠的解決方案

長期真正的解決辦法=自動化構建步驟

最後,你最終將不得不如果您的應用程序變得複雜,請運行配置腳本,這就是爲什麼我停止使用彈性beanstalk並開始使用AWS cloudformation,它爲您提供了一個「STEP」,您可以在其中輸入與Docker構建步驟類似的所有設置腳本。它還將爲每個創建的新實例運行這些配置步驟,因此您不需要ssh登錄每個框。

Cloudformation將所有關於將您的基礎架構設置轉換爲代碼,您可以實際檢查到github並構建而無需任何手動干預。您只需經歷一次配置構建腳本的頭痛問題,然後將您的環境保存爲json或yaml文件。你可以包括MySQL服務器,tomcat版本,防火牆,負載均衡等等,並且從一個文件構建所有這些。

1

您可以將在S3存儲桶的jar文件,然後使用EB container command將文件複製到lib目錄,如:

"copy-lib-file": 
    mode: "000644" 
    owner: root 
    group: root 
    source: https://s3.amazonaws.com/<MY_BUCKET>/<my-JDBC-driver>.jar 
+0

它會工作,當說web應用程序的負載增加和彈性beanstalk使用自動擴展來自動創建新的實例嗎? –

+0

是的,這樣做的重點是告訴Elastic Beanstalk如何設置它創建的每個新服務器。 –

+0

非常感謝!將嘗試此解決方案 –

1

Tomcat的,像許多應用程序服務器,安裝各種類的裝載器(java.lang.ClassLoader的實現),它將使您的應用程序能夠訪問JDBC jar資源。

的順序是:

  1. 引導
  2. 系統
  3. 通用 - $ CATALINA_BASE/lib目錄
  4. 的webapp -/WEB-INF/lib目錄

把水罐裏的WEB-INF/lib目錄裏面的應用程序。請注意,此JAR將僅對此特定應用程序可見並且不可用。

+0

我已經試過這個,但它不起作用。 Tomcat7不使用保存在WEB-INF/lib文件夾中的jar –

+0

如果Tomcat配置爲委託類加載,它將首先從System和Common加載。要優先從Web應用程序加載,請將委託設置爲false。 Rostam

+0

「它不工作」聽起來像你做錯了什麼。請提供更多細節。 –

1

爲了做到這一點,你需要使用。 ebextensions。 使用.ebextensions,您可以將文件從應用程序包複製到beanstalk文件系統。

但請記住,在豆漿環境中部署的其他應用程序不會使用您的驅動程序。你的beanstalk實例專用於一個應用程序。每次上傳應用程序時,都必須上傳mysql驅動程序才能部署到tomcat安裝。

因此,在tomcat(通過jndi共享jdbc連接池)中,您無法獲得上傳大小或內存佔用量方面的任何信息。

看起來上傳包含jdbc驅動程序的應用程序(在maven配置中未提供)是一種更加面向豆杆的解決方案。

但是有些情況下,您不希望對打包的戰爭進行任何更改,例如將應用程序部署到包含jdbc驅動程序的本地tomcat服務器,並且希望將其上載到彈性豆莖環境。 在這種情況下,您也可以考慮使用docker with elastic beanstalk作爲選項。

+0

我只需要運行的彈性青苗一個應用程序,所以這對我來說不會是個問題。具有彈性beanstalk的Docker對我來說也是一個合適的解決方案。謝謝回答 –

+0

最不費力的解決方案是與打包應用程序的罐子。 使用.ebextensions將是一個痛苦的解決方案(取決於豆莖經驗)。 使用泊塢窗是痛苦得多,因此可能不是一個選項。 – gkatzioura

+0

是的,但包裝與戰爭文件的罐子似乎並沒有與MySQL的連接器一些奇怪的原因(儘管它應該工作)工作,我無法找出原因。 –