有一台server上跑个tomcat的实例的情况,我遇到过这种情况,毕竟把多个应用部署到一个实例中,如果某个应用出了问题,导致tomcat奔溃,其他应用也gg了。闲话到此。
通常部署多实例就是解压多个tomcat的包,然后保证不同实例所涉及的端口不一致就好了。另外的方法是共用tomcat的bin和lib进行多个实例的部署,下面是示范动作:
- 下载tomcat的zip版本,解压到D盘,到conf目录把setclasspath.bat前加上“set JAVA_HOME=jdk目录”(不要带引号)
- 进入tomcat所在的目录并新建实例目录,加速为x-instance,把除了bin和lib目录的所有内容全部移动到x-instance目录,复制x-instance到当前目录多份,重命名为y-instance、z-instance,此时就有三个实例了。
- 修改y实例下的server.xml配置文件的三个端口号,我是在之前基础上加一
- 修改z实例下的server.xml配置文件的三个端口好,我是在之前基础上加二
- 为x、y、z实例分别创建启动脚本
- 打完收工
启动脚本:
# windows版本,linu版本原理相同
# 存放位置在实例的目录内
@echo off
@echo 删除缓存
rmdir /S /Q %CD%/work
rem------------------------------------------------------------------------------------------
rem set the CATALINA_OPTS & JAVA_OPTS
rem set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=200m -XX:MaxPermSize=200m
rem
rem-------------------------------------------------------------------------------------------
SET CATALINA_BASE=%CD%
cd ../bin
set title=实例名称
catalina.bat start
关闭脚本:
# 这里用到了sed和awk工具需要自己到网上找windows版本的,比较好找。
# 对应位置需要修改。
@echo off
rem ----------------------------------------------------------------
set tomcatport=8080
set appinfo=测试服务
rem -----------------------------------------------------------------
netstat -ano | findstr %tomcatport% | gawk "{ print $5 } " > command.tmp
findstr [0-9] command.tmp > tmp.tmp
if %errorlevel% == 1 goto done
sed -e "s/.*/taskkill /f /pid &/" command.tmp | sed -n "w b.bat"
call b.bat
echo 当前已经关闭了端口为%tomcatport%的tomcat服务
echo 被关闭的应用为:%appinfo%
goto done
:done
del /f command.tmp
if exist b.bat del /f b.bat
if exist tmp.tmp del /f tmp.tmp
echo 当已经没有端口为%tomcatport%的tomcat服务在运行。
echo by:luohaonan
pause