说明:本文参照了以下文章:
http://apps.hi.baidu.com/share/detail/24999679
近期因为客户较多,发现在同一台服务器上由于Lerx V2版本不同,导致了Web应用出错。分析原因,发现是由于所有WEB应用共享同一Tomcat进程,而用户类(WEB-INF/classes)下的类文件同名但内容并不相同导致冲突。因此考虑在linux环境下采用独立jvm来处理解决这个问题。
参考上述文章设置,由于文中一些细节没有交待或有错误,因此补充如下。
该文章前部分是apache整合问题,这些内容网上很多,可以参考。lerx网站上也有一些介绍。
从实践中看清tomcat的启动过程与原理就可以轻松完成这一多实例方案。
CATALINA_BASE是一个非常重要的变量,可以认为是应用程序主目录。当tomcat启动时,会从这一目录下寻找它所需要的资源。所以在该目录下,应该有下面一些文件夹:conf、temp、work、logs。对于我来说,一般用户的文件我都会放在同一个目录内,所以,我在目录下还建了bin、public_html文件夹。以下是各文件的简要说明
conf -------- tomcat配置文件目录
temp -------- 临时文件目录
work -------- tomcat工作目录
logs -------- 日志文件目录
bin ------- 执行文件目录
public_html -------- 网站文件目录
根据上述目录结构,可以修改/etc/skel模板文件夹。在这个文件夹下按照上述进行建立文件夹。当建立一个新用户时,会根据这个目录模板产生相应的用户文件夹。
笔者在按参考文章时最后发现无法实现,关键是文中有两个地方没有交待清楚。一是上述文件夹问题,二是应该将Tomcat的conf下的其它文件也要复制到用户目录的conf目录下。
每个server.xml中注意要修改端口号不要相同。比如:第一个应用server.xml中的http采用8081端口,第二个应用server.xml中采用8082端口。
.sh文件可以放在bin目录中。
因此可以export CATALINA_BASE="$PWD/../"来指定。一个更好的方法是将tomcat.sh放在用户目录下,tomcat.sh脚本内容可以如下:
#!/bin/bash
# description: Start up the Tomcat servlet engine.
# Sourc function library.
. /etc/init.d/functions
RETVAL=$?
export CATALINA_BASE="$PWD"
export CATALINA_HOME="/usr/local/tomcat"
export JVM_OPTIONS="-Xms32m –Xmx64m"
case "$1" in
start)
if [ -f $CATALINA_HOME/bin/startup.sh ];
then
echo $"Start Tomcat"
$CATALINA_HOME/bin/startup.sh
fi
;;
stop)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];
then
echo $"Stop Tomcat"
$CATALINA_HOME/bin/shutdown.sh
fi
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
;;
esac
exit $RETVAL
目录及文件结构如下: