maven自动部署到远程tomcat服务器教程

适用于tomcat的7.x ,8.x, 9.x版本
1,首先,配置tomcat的manager项目,详情见博客:https://blog.csdn.net/weixin_42254857/article/details/80509662
2,其次,在maven配置文件pom.xml中添加以下代码:
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <url> http://serverIp:port/manager/text </url>
        <username> username </username>
        <password>password</password>
        <update>true</update>
        <path>/xxx</path>
    </configuration>
</plugin>
其中serverIp为服务器ip地址,port为tomcat端口号,username和password为配置manager项目时设置的用户名和密码 ,path中写项目在tomcat服务器中的部署路径
3,使用mvn tomcat7:deploy和mvn tomcat7:redeploy命令部署项目
第一次部署使用mvn tomcat7:deploy;
更新部署使用mvn tomcat7:redeploy;
注意点:
如果第一次部署使用mvn tomcat7:redeploy,则只会执行上传war文件,服务器不会自动解压部署。
如果路径在tomcat服务器中已存在并且使用mvn tomcat7:deploy命令的话,上面的配置中一定要配置<update>true</update>,不然会报错。
4,内存泄漏
自动部署具有严重的内存泄漏现象。tomcat的manager提供了诊断在部署时是否产生内存泄漏的功能,点击下图所指Find leaks按钮;

在Message中出现如下信息说明在部署的时候有内存泄漏:

如果同一项目多次重新部署,则一个项目名可能会出现多次。
部署时产生内存泄漏的原因是每次(重新)部署时,Tomcat会为项目新建一个类加载器,而旧的类加载器没有被GC回收。
解决方案:
maven的库classloader-leak-prevention-servlet
首先添加maven依赖
<dependency>
< groupId > se.jiderhamn.classloader-leak-prevention </ groupId >
< artifactId > classloader-leak-prevention-servlet </ artifactId >
< version > 2.1.0 </ version > </ dependency >
然后在web.xml添加监听器 (注意:必须让此Listener成为web.xml中的第一个Listener,否则不起作用)
<listener>
    <listener-class>se.jiderhamn.classloader.leak.prevention.ClassLoaderLeakPreventorListener</listener-class>
</listener>
注意:
1) 添加这个Listener后,默认在tomcat关闭5s后jvm会进行内存回收的操作,具体时间设置参考
所以,在关闭后的5s内,再次启动tomcat,可能会存在问题,导致启动无效(如果出现tomcat重启后日志显示正常但是服务器不工作的话考虑一下是不是这个问题)。
2)这个Listener只解决部署的内存泄漏,其他问题(如jdbc等)产生的内存泄漏还需要自己解决。

猜你喜欢

转载自blog.csdn.net/weixin_42254857/article/details/80509652