关于tomcat:基于嵌入式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 “启动参数”

启动参数肯定要用双引号蕴含,这样能力正确解析

定义:”$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包名称,多个应用,离开

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理