 Java 服務(wù)器兼容方案詳解)
Luminus-template WAR 部署到 Tomcat傳統(tǒng) Java 服務(wù)器兼容方案詳解【免費(fèi)下載鏈接】luminus-templatea template project for the Luminus framework項(xiàng)目地址: https://gitcode.com/gh_mirrors/lu/luminus-templateLuminus 是 Clojure 社區(qū)最流行的全棧 Web 框架而 luminus-template 正是它的官方 Leiningen 模板項(xiàng)目。默認(rèn)情況下Luminus 應(yīng)用以內(nèi)嵌服務(wù)器方式運(yùn)行但在很多企業(yè)環(huán)境中運(yùn)維團(tuán)隊(duì)只允許應(yīng)用部署在 Tomcat 等傳統(tǒng) Java 應(yīng)用服務(wù)器上。好消息是luminus-template 內(nèi)置了war特性可以一鍵把 Clojure Web 應(yīng)用打包成標(biāo)準(zhǔn) WAR 文件實(shí)現(xiàn) Luminus WAR 部署到 Tomcat 的無(wú)縫兼容。本文將詳解打包原理、最快配置方法、部署步驟與常見(jiàn)坑位幫你快速上手。為什么需要把 Luminus 應(yīng)用打成 WAR 包很多 Clojure 新手第一次接觸 Luminus 時(shí)習(xí)慣用lein run或lein uberjar啟動(dòng)應(yīng)用。這兩種方式都依賴 JVM 直接運(yùn)行屬于「自包含」模式。但現(xiàn)實(shí)中的生產(chǎn)環(huán)境往往有這些約束 企業(yè)內(nèi)網(wǎng)只開(kāi)放 Tomcat/WebLogic 等傳統(tǒng) Servlet 容器不允許自建端口服務(wù) 安全團(tuán)隊(duì)要求應(yīng)用必須走統(tǒng)一的應(yīng)用服務(wù)器管理、監(jiān)控和日志體系 已有系統(tǒng)基于 Servlet 規(guī)范希望把 Clojure 應(yīng)用作為其中一個(gè) Web 應(yīng)用掛載WARWeb Application Archive就是標(biāo)準(zhǔn) Java Web 應(yīng)用的打包格式任何遵循 Servlet 規(guī)范的容器都能直接運(yùn)行它。Luminus 通過(guò)war特性讓 Clojure 應(yīng)用變成「一等公民」Servlet 應(yīng)用這就是它在傳統(tǒng) Java 服務(wù)器上的兼容方案核心價(jià)值。luminus-template 的 war 特性到底做了什么打開(kāi)模板源碼中的 src/leiningen/new/war.clj 可以看到war特性主要做了這幾件事自動(dòng)依賴 Jetty Servlet 支持在 src/leiningen/new/luminus.clj 中war會(huì)自動(dòng)掛載jetty特性并引入ring/ring-servlet依賴讓 Ring 應(yīng)用暴露為 Servlet 接口生成 uberwar 配置在生成的項(xiàng)目 project.clj 中加入:uberwar選項(xiàng)指定handler/app-handler作為入口并綁定init/destroy生命周期鉤子自動(dòng)添加 lein-uberwar 插件這是打包 WAR 的核心工具可選異步支持如果你啟用async會(huì)升級(jí)到 Servlet 3.1 規(guī)范并開(kāi)啟異步請(qǐng)求處理也就是說(shuō)你不需要手寫(xiě)任何 Servlet 代碼模板已經(jīng)幫你把 Ring 應(yīng)用橋接到了 Servlet 容器上。最快配置方法一條命令生成支持 WAR 的項(xiàng)目使用 luminus-template 創(chuàng)建項(xiàng)目時(shí)只要在項(xiàng)目名后面追加war即可lein new luminus myapp war如果你還需要數(shù)據(jù)庫(kù)、認(rèn)證等功能可以混合多個(gè)特性例如lein new luminus myapp war postgres auth創(chuàng)建完成后你可以在生成的project.clj里看到類似這樣的:uberwar配置塊:uberwar {:handler myapp.handler/app-handler :init myapp.handler/init :name myapp.war}整個(gè)配置過(guò)程只需要一條命令這也是模板被稱為「最快配置方法」的原因。一鍵打包步驟從源碼生成 .war 文件項(xiàng)目創(chuàng)建好后在項(xiàng)目根目錄執(zhí)行l(wèi)ein uberwar幾秒鐘后target/目錄下就會(huì)出現(xiàn)myapp.war文件。你可以用unzip -l快速驗(yàn)證包內(nèi)結(jié)構(gòu)確認(rèn)WEB-INF/web.xml和WEB-INF/classes等標(biāo)準(zhǔn)目錄都在這就說(shuō)明它是一個(gè)合法的標(biāo)準(zhǔn) WAR 包。部署到 Tomcat一步步操作指南拿到.war文件后部署到 Tomcat 非常簡(jiǎn)單停止 Tomcat 服務(wù)可選但推薦bin/shutdown.sh或 Windows 下的shutdown.bat復(fù)制 WAR 文件把myapp.war拷貝到 Tomcat 的webapps/目錄啟動(dòng) Tomcatbin/startup.shTomcat 會(huì)自動(dòng)解壓并部署應(yīng)用訪問(wèn)應(yīng)用打開(kāi)瀏覽器訪問(wèn)http://localhost:8080/myapp/注意這里的訪問(wèn)路徑myapp默認(rèn)取自 WAR 文件名。如果你的應(yīng)用需要掛在根路徑可以把 WAR 改名為ROOT.war后部署。常見(jiàn)問(wèn)題與注意事項(xiàng)??不要與 Immutant 混用官方明確警告war特性不適用于基于 Immutant 的應(yīng)用Immutant 跑在 WildFly 上兩者會(huì)沖突。??上下文路徑與靜態(tài)資源部署到子路徑后應(yīng)用內(nèi)的資源鏈接要留意上下文路徑問(wèn)題。模板的servlet特性見(jiàn) src/leiningen/new/servlet.clj可以配合處理 Servlet context 中間件建議 WAR 部署時(shí)一并啟用。??異步處理如果你的應(yīng)用用到異步 Ring handler務(wù)必確認(rèn)async已啟用模板會(huì)自動(dòng)切換到 Servlet 3.1保證異步請(qǐng)求在 Tomcat 上正常工作。??端口與配置部署到 Tomcat 后應(yīng)用不再自己監(jiān)聽(tīng)端口端口由 Tomcat 統(tǒng)一管理config.edn里的:port配置見(jiàn) env/prod/resources/config.edn在 WAR 模式下會(huì)被忽略這是正常現(xiàn)象??偨Y(jié)通過(guò) luminus-template 的war特性Clojure 開(kāi)發(fā)者不需要修改一行業(yè)務(wù)代碼就能把 Luminus 應(yīng)用打包成標(biāo)準(zhǔn) WAR 并部署到 Tomcat。整個(gè)過(guò)程可以概括為三步lein new luminus myapp war創(chuàng)建項(xiàng)目 →lein uberwar打包 → 復(fù)制到webapps/目錄啟動(dòng)。對(duì)于需要兼容傳統(tǒng) Java 服務(wù)器環(huán)境的企業(yè)項(xiàng)目來(lái)說(shuō)這無(wú)疑是最省心的方案?!久赓M(fèi)下載鏈接】luminus-templatea template project for the Luminus framework項(xiàng)目地址: https://gitcode.com/gh_mirrors/lu/luminus-template創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考