前言
最近針對java專案的部署方式進行整理,jenkins/tomcat/windows工具/linux腳本/web部署平臺等等
發現war包通過tomcat部署比較繁瑣,等待時間長,配置規則復雜對于小白很不友好,也難以接入到自定義的部署工具/平臺中
之前開發的Jar包部署平臺是servlet開發通過嵌入式tomcat部署,借此打開思路
能否基于嵌入式tomcat做一個war包啟動器,通過代碼的方式開啟tomcat容器來部署war包
原始碼地址:https://gitee.com/code2roc/jar-manage/tree/master/waragent
借此啟動器可以將war包部署集成到自己的工具平臺中,將啟動器的jar包按普通方式部署即可
方案
tomcat啟動一般需要幾個基本引數設定
- 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);
后續實際使用中還涉及到了啟動jvm引數設定及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)
打包
原來預想把maven專案打到一個jar包方便呼叫,但是打包插件會把依賴jar包中的class檔案進行合并
嵌入式tomcat依賴的jar包有相同包名的,導致class檔案覆寫,websocket相關內容報錯
所以把依賴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 "啟動引數"
啟動引數一定要用雙引號包含,這樣才能正確決議
定義:"$appname★$warFilePath★$port★$contextPath★$jvmParam★$skipScan"
示例:"testwar★D:\testwar.war★9091★/testwar★-Xms3072m -Xmx3072m -Djava.awt.headless=true★xxx*.jar"
內部使用★分開,一共6個引數,最后一個引數可省略,其余必填
- 引數1:應用名稱
- 引數2:war包絕對路徑
- 引數3:埠號
- 引數4:映射路由(contextPath)
- 引數5:jvm啟動引數,主要指定記憶體大小
- 引數6:啟動掃描跳過jar包名稱,多個使用,分開
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/556492.html
標籤:其他
上一篇:【numpy基礎】--陣列索引
下一篇:返回列表