java基于嵌入式Tomcat的War包启动器

 更新时间:2023年07月03日 08:37:44   作者:code2roc  
本文主要介绍了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启动器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • kafka topic 权限控制(设置删除权限)

    kafka topic 权限控制(设置删除权限)

    大家都知道Kafka是一个消息队列,把消息放到队列里边的叫生产者,从队列里边消费的叫消费者。今天通过本文给大家介绍kafka topic 权限控制的相关知识,感兴趣的朋友一起看看吧
    2021-11-11
  • Java Set接口及常用实现类总结

    Java Set接口及常用实现类总结

    Collection的另一个子接口就是Set,他并没有我们List常用,并且自身也没有一些额外的方法,全是继承自Collection中的,因此我们还是简单总结一下,包括他的常用实现类HashSet、LinkedHashSet、TreeSet的总结
    2023-01-01
  • springMVC盗链接详解

    springMVC盗链接详解

    这篇文章主要为大家详细介绍了SpringMVC盗链接详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助
    2021-07-07
  • 关于Unsupported Media Type的解决方案

    关于Unsupported Media Type的解决方案

    在Web开发中,415错误表示服务器无法处理请求附带的媒体格式,本文介绍了导致HTTP 415错误的原因以及解决该问题的两种方法,首先,415错误通常是由于客户端请求的内容类型与服务器期望的不匹配引起的,例如,服务器可能期望JSON格式的数据
    2024-10-10
  • idea项目实现移除和添加git

    idea项目实现移除和添加git

    本文指导读者如何从官网下载并安装Git,以及在IDEA中配置Git的详细步骤,首先,用户需访问Git官方网站下载适合自己操作系统的Git版本并完成安装,接着,在IDEA中通过设置找到git.exe文件以配置Gi
    2024-10-10
  • 一篇文章带你深入了解Java基础

    一篇文章带你深入了解Java基础

    这篇文章主要给大家介绍了关于Java中方法使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • MyBatis-Plus中更新操作的两种实现

    MyBatis-Plus中更新操作的两种实现

    本文主要介绍了MyBatis-Plus中更新操作的两种实现,主要是通过id更新和条件更新,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • No ‘Access-Control-Allow-Origin‘ header is present跨域及解决

    No ‘Access-Control-Allow-Origin‘ header is&nb

    这篇文章主要介绍了No ‘Access-Control-Allow-Origin‘ header is present跨域及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • mybatis判断int是否为空的时候,需要注意的3点

    mybatis判断int是否为空的时候,需要注意的3点

    这篇文章主要介绍了mybatis判断int是否为空的时候,需要注意的3点,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 简单易懂的MyBatis分库分表方案分享

    简单易懂的MyBatis分库分表方案分享

    这篇文章主要给大家介绍了关于MyBatis分库分表方案的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用MyBatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03

最新评论