以下場景是否有框架或某種解決方案?從遠程位置動態加載罐子
我有一個運行於Tomcat服務器上的webapp。當啓動我的應用程序時,我想下載一些位於完全不同的地方的罐子。像外部連接服務器或其他東西。在那些罐子裏,我所有的商業邏輯都需要在春天注入。
爲什麼我想要這樣的東西?我的應用程序安裝在很多不同的位置。要在所有安裝中輕鬆獲得最新版本的代碼,我只想更新1個位置,並且所有應用程序在重新啓動後都會更新。
以下場景是否有框架或某種解決方案?從遠程位置動態加載罐子
我有一個運行於Tomcat服務器上的webapp。當啓動我的應用程序時,我想下載一些位於完全不同的地方的罐子。像外部連接服務器或其他東西。在那些罐子裏,我所有的商業邏輯都需要在春天注入。
爲什麼我想要這樣的東西?我的應用程序安裝在很多不同的位置。要在所有安裝中輕鬆獲得最新版本的代碼,我只想更新1個位置,並且所有應用程序在重新啓動後都會更新。
您的應用程序將需要使用自定義ClassLoader
來執行此操作。
好消息是,你不必自己寫:你可以使用Java的內置java.net.URLClassLoader
。壞消息是你必須將它連接到Tomcat,這可能需要一些代碼。
這是一個未經考驗的建議:
ClassLoader
擴展Tomcat的WebappClassLoader
URLClassLoader
成員,並在構造函數(或類似start()
的LifecycleListener
事件之一)super.whatever
或urlClassLoader.whatever
是由你:閱讀Servlet規範以確定要如何在你的web應用的META-INF/context.xml
文件中定義<Loader>
做事ClassLoader
。如果您需要上述任何幫助,請撥打Tomcat users' mailing list。
編輯2014年11月4日
注意,我認爲使用URLClassLoader
做這種事情是脆弱的,容易出錯,而且可能是一個壞主意。相反,請修復部署過程,以便跨羣集更新Web應用程序更容易。您可以使用Tomcat的「農場網絡部署者」來完成這些任務,或者使用其他解決方案。但是通過網絡加載課程可能會讓你的生活複雜化,並在某些情況下導致一些奇怪的不可重複行爲。
通常,這是在使用rsync
腳本進行部署期間完成的,以便將部署工件分發到羣集。
您可能可以配置由Tomcat提供的WebappClassLoader以從遠程位置加載。
可能dup? http://stackoverflow.com/questions/22569710/how-can-i-automatically-deploy-a-war-from-nexus-to-tomcat – PaulProgrammer 2014-11-04 17:10:51