ToB企服应用市场:ToB评测及商务社交产业平台

标题: 基于嵌入式Tomcat的War包启动器 [打印本页]

作者: 尚未崩坏    时间: 2023-7-2 18:24
标题: 基于嵌入式Tomcat的War包启动器
前言

最近针对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启动一般需要几个基本参数设置
  1. Tomcat tomcat = new Tomcat();
  2. tomcat.setPort(port);
  3. StandardContext ctx = (StandardContext) tomcat.
  4. addWebapp(contextPath, catalinaBase + File.separator + "webapps" + File.separator + name + ".war");
复制代码
tomcat9启动还需要指定cookie处理策略,否则无法识别
  1. CookieProcessor cookieProcessor = new LegacyCookieProcessor();
  2. ctx.setCookieProcessor(cookieProcessor);
复制代码
后续实际使用中还涉及到了启动jvm参数设置及jar包扫描跳过的配置
  1. tomcat.getEngine().setJvmRoute(jvmStartCommand);
复制代码
  1. StandardJarScanner jarScanner = new StandardJarScanner();
  2. StandardJarScanFilter jarScanFilter = new StandardJarScanFilter();
  3. jarScanFilter.setTldSkip(skipScan);
  4. jarScanFilter.setPluggabilitySkip(skipScan);
  5. jarScanner.setJarScanFilter(jarScanFilter);
  6. ctx.setJarScanner(jarScanner)
复制代码
打包

原来预想把maven项目打到一个jar包方便调用,但是打包插件会把依赖jar包中的class文件进行合并
嵌入式tomcat依赖的jar包有相同包名的,导致class文件覆盖,websocket相关内容报错
所以把依赖jar包打入到同级lib文件夹中,和waranaget.jar一起拷贝使用
  1. <build>
  2.         <finalName>${artifactId}</finalName>
  3.         <plugins>
  4.             <plugin>
  5.                 <groupId>org.apache.maven.plugins</groupId>
  6.                 <artifactId>maven-jar-plugin</artifactId>
  7.                 <configuration>
  8.                     <archive>
  9.                         <manifest>
  10.                             <addClasspath>true</addClasspath>
  11.                             <classpathPrefix>lib/</classpathPrefix>
  12.                             <mainClass>com.code2roc.waragent.Application</mainClass>
  13.                         </manifest>
  14.                     </archive>
  15.                 </configuration>
  16.             </plugin>
  17.             
  18.             <plugin>
  19.                 <groupId>org.apache.maven.plugins</groupId>
  20.                 <artifactId>maven-dependency-plugin</artifactId>
  21.                 <executions>
  22.                     <execution>
  23.                         <id>copy</id>
  24.                         <phase>package</phase>
  25.                         <goals>
  26.                             <goal>copy-dependencies</goal>
  27.                         </goals>
  28.                         <configuration>
  29.                             <outputDirectory>
  30.                                 ${project.build.directory}/lib
  31.                             </outputDirectory>
  32.                         </configuration>
  33.                     </execution>
  34.                 </executions>
  35.             </plugin>
  36.         </plugins>
  37.     </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个参数,最后一个参数可省略,其余必填

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4