java基于嵌入式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启动一般需要几个基本参数设置
- 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 “启动参数”
启动参数一定要用双引号包含,这样才能正确解析
定义:“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”
内部使用★分开,一共6个参数,最后一个参数可省略,其余必填
- 参数1:应用名称
- 参数2:war包绝对路径
- 参数3:端口号
- 参数4:映射路由(contextPath)
- 参数5:jvm启动参数,主要指定内存大小
- 参数6:启动扫描跳过jar包名称,多个使用,分开
到此这篇关于java基于嵌入式Tomcat的War包启动器的文章就介绍到这了,更多相关java War启动器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
seata-1.4.0安装及在springcloud中使用详解
这篇文章主要介绍了seata-1.4.0安装及在springcloud中使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-12-12java读取配置文件自定义字段(yml、properties)
本文主要介绍了java读取配置文件自定义字段(yml、properties),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-07-07
最新评论