java基于嵌入式Tomcat的War包啟動器
前言
最近針對java項(xiàng)目的部署方式進(jìn)行整理,jenkins/tomcat/windows工具/linux腳本/web部署平臺等等
發(fā)現(xiàn)war包通過tomcat部署比較繁瑣,等待時(shí)間長,配置規(guī)則復(fù)雜對于小白很不友好,也難以接入到自定義的部署工具/平臺中
之前開發(fā)的Jar包部署平臺是servlet開發(fā)通過嵌入式tomcat部署,借此打開思路
能否基于嵌入式tomcat做一個(gè)war包啟動器,通過代碼的方式開啟tomcat容器來部署war包
源碼地址:https://gitee.com/code2roc/jar-manage/tree/master/waragent
借此啟動器可以將war包部署集成到自己的工具平臺中,將啟動器的jar包按普通方式部署即可
方案
tomcat啟動一般需要幾個(gè)基本參數(shù)設(shè)置
- war包路徑
- 端口
- 映射路由
Tomcat tomcat = new Tomcat(); tomcat.setPort(port); StandardContext ctx = (StandardContext) tomcat. addWebapp(contextPath, catalinaBase + File.separator + "webapps" + File.separator + name + ".war");
tomcat9啟動還需要指定cookie處理策略,否則無法識別
CookieProcessor cookieProcessor = new LegacyCookieProcessor(); ctx.setCookieProcessor(cookieProcessor);
后續(xù)實(shí)際使用中還涉及到了啟動jvm參數(shù)設(shè)置及jar包掃描跳過的配置
tomcat.getEngine().setJvmRoute(jvmStartCommand);
StandardJarScanner jarScanner = new StandardJarScanner(); StandardJarScanFilter jarScanFilter = new StandardJarScanFilter(); jarScanFilter.setTldSkip(skipScan); jarScanFilter.setPluggabilitySkip(skipScan); jarScanner.setJarScanFilter(jarScanFilter); ctx.setJarScanner(jarScanner)
打包
原來預(yù)想把maven項(xiàng)目打到一個(gè)jar包方便調(diào)用,但是打包插件會把依賴jar包中的class文件進(jìn)行合并
嵌入式tomcat依賴的jar包有相同包名的,導(dǎo)致class文件覆蓋,websocket相關(guān)內(nèi)容報(bào)錯(cuò)
所以把依賴jar包打入到同級lib文件夾中,和waranaget.jar一起拷貝使用
<build> <finalName>${artifactId}</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.code2roc.waragent.Application</mainClass> </manifest> </archive> </configuration> </plugin> <!-- 拷貝依賴的jar包到lib目錄 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/lib </outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build>
使用
java -jar waragent.jar “啟動參數(shù)”
啟動參數(shù)一定要用雙引號包含,這樣才能正確解析
定義:“a p p n a m e ★ appname★appname★warFilePath★p o r t ★ port★port★contextPath★j v m P a r a m ★ jvmParam★jvmParam★skipScan”
示例:“testwar★D:\testwar.war★9091★/testwar★-Xms3072m -Xmx3072m -Djava.awt.headless=true★xxx*.jar”
內(nèi)部使用★分開,一共6個(gè)參數(shù),最后一個(gè)參數(shù)可省略,其余必填
- 參數(shù)1:應(yīng)用名稱
- 參數(shù)2:war包絕對路徑
- 參數(shù)3:端口號
- 參數(shù)4:映射路由(contextPath)
- 參數(shù)5:jvm啟動參數(shù),主要指定內(nèi)存大小
- 參數(shù)6:啟動掃描跳過jar包名稱,多個(gè)使用,分開
到此這篇關(guān)于java基于嵌入式Tomcat的War包啟動器的文章就介紹到這了,更多相關(guān)java War啟動器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
kafka topic 權(quán)限控制(設(shè)置刪除權(quán)限)
大家都知道Kafka是一個(gè)消息隊(duì)列,把消息放到隊(duì)列里邊的叫生產(chǎn)者,從隊(duì)列里邊消費(fèi)的叫消費(fèi)者。今天通過本文給大家介紹kafka topic 權(quán)限控制的相關(guān)知識,感興趣的朋友一起看看吧2021-11-11Java Set接口及常用實(shí)現(xiàn)類總結(jié)
Collection的另一個(gè)子接口就是Set,他并沒有我們List常用,并且自身也沒有一些額外的方法,全是繼承自Collection中的,因此我們還是簡單總結(jié)一下,包括他的常用實(shí)現(xiàn)類HashSet、LinkedHashSet、TreeSet的總結(jié)2023-01-01關(guān)于Unsupported Media Type的解決方案
在Web開發(fā)中,415錯(cuò)誤表示服務(wù)器無法處理請求附帶的媒體格式,本文介紹了導(dǎo)致HTTP 415錯(cuò)誤的原因以及解決該問題的兩種方法,首先,415錯(cuò)誤通常是由于客戶端請求的內(nèi)容類型與服務(wù)器期望的不匹配引起的,例如,服務(wù)器可能期望JSON格式的數(shù)據(jù)2024-10-10idea項(xiàng)目實(shí)現(xiàn)移除和添加git
本文指導(dǎo)讀者如何從官網(wǎng)下載并安裝Git,以及在IDEA中配置Git的詳細(xì)步驟,首先,用戶需訪問Git官方網(wǎng)站下載適合自己操作系統(tǒng)的Git版本并完成安裝,接著,在IDEA中通過設(shè)置找到git.exe文件以配置Gi2024-10-10MyBatis-Plus中更新操作的兩種實(shí)現(xiàn)
本文主要介紹了MyBatis-Plus中更新操作的兩種實(shí)現(xiàn),主要是通過id更新和條件更新,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04No ‘Access-Control-Allow-Origin‘ header is&nb
這篇文章主要介紹了No ‘Access-Control-Allow-Origin‘ header is present跨域及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02mybatis判斷int是否為空的時(shí)候,需要注意的3點(diǎn)
這篇文章主要介紹了mybatis判斷int是否為空的時(shí)候,需要注意的3點(diǎn),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07