9
回答
生产环境的java项目如何更新
终于搞明白,存储TCO原来是这样算的>>>   
        java项目上线后,可能随时会迭代更新,修复bug。问题来了,更新项目大多数时候需要重启服务,但是在生产环境可不能随便重启服务的。大家是如何处理这个问题的呢?我能想到的就是,部署两个应用,用nginx做负载,需要更新的时候,一个应用生产,一个应用更新,完了再更新另一个。求教还有没有什么方法呢?
举报
小面
发帖于3年前 9回/1K+阅
共有9个答案 最后回答: 3年前

把所有Java的实现的东西都实现成为WebService或者REST 或者等等。。。接口,多计算机启动WebService,之后进行服务变更,小改动只要接口统一,可以进行平滑切换,大改动请把调用接口独立出来,例如用PHP实现等方式。

简单一些的可以多服务器切换。

都是这么干的,代码流:

本机开发——》测试机——》线上

可以做成自动化的,只需要执行一个shell就搞定。

可以给你一个自动部署到测试机的脚本做参考

=======================

#!/bin/sh
SERVER="xxx.xxx.xxx.xxx"
SERVER_DIR="deployment/"
JAVA_HOME="/usr/lib/jvm/jdk1.7.0_25"
JRE_HOME="/usr/lib/jvm/jdk1.7.0_25/jre"
TOMCAT_HOME="tomcat/apache-tomcat-7.0.42"

echo ">> stop tomcat..."
ssh web@$SERVER "export JAVA_HOME=$JAVA_HOME; export JRE_HOME=$JRE_HOME; sh $TOMCAT_HOME/bin/shutdown.sh;"

echo ">> gradle war..."
gradle clean
gradle war

mkdir web
cd web
jar -xvf ../build/libs/server.war
#和tomcat自带的包冲突
rm -f WEB-INF/lib/jsp-api-2.0.jar
rm -f WEB-INF/lib/servlet-api-2.4.jar
#applicationContext变成dev模式,同时保留dis模式,方便部署
mv -f WEB-INF/applicationContext.xml WEB-INF/applicationContext.dis
mv -f WEB-INF/applicationContext.dev WEB-INF/applicationContext.xml
cd ..

#增量同步
echo ">> rsync..."
rsync -rtzvlp --delete web web@$SERVER:$SERVER_DIR

rm -rf web

echo ">> start tomcat,remote debug port on 8000..."
ssh web@$SERVER "export JAVA_HOME=$JAVA_HOME; export JRE_HOME=$JRE_HOME;cd $TOMCAT_HOME; sh bin/catalina.sh jpda start; tail -f logs/catalina.out;"

--- 共有 2 条评论 ---
小面自动部署最好还是做任务计划在凌晨做,我说的是在白天的生产环境中有紧急的更新的情况,特别是涉及到支付的业务要特别谨慎。 3年前 回复
干死it可以参考下 3年前 回复

你们的还好,我是做存储的,高峰的时候1分钟有100W次读请求,没有啥负载均衡设备,都是TCP直接连接的。

现在几百台机器了,手动都上不动了,不过我们公司内部有自动部署系统。不然几万台服务器上线不会累死去啊。

引用来自“cantellow”的评论

可以给你一个自动部署到测试机的脚本做参考

=======================

#!/bin/sh
SERVER="xxx.xxx.xxx.xxx"
SERVER_DIR="deployment/"
JAVA_HOME="/usr/lib/jvm/jdk1.7.0_25"
JRE_HOME="/usr/lib/jvm/jdk1.7.0_25/jre"
TOMCAT_HOME="tomcat/apache-tomcat-7.0.42"

echo ">> stop tomcat..."
ssh web@$SERVER "export JAVA_HOME=$JAVA_HOME; export JRE_HOME=$JRE_HOME; sh $TOMCAT_HOME/bin/shutdown.sh;"

echo ">> gradle war..."
gradle clean
gradle war

mkdir web
cd web
jar -xvf ../build/libs/server.war
#和tomcat自带的包冲突
rm -f WEB-INF/lib/jsp-api-2.0.jar
rm -f WEB-INF/lib/servlet-api-2.4.jar
#applicationContext变成dev模式,同时保留dis模式,方便部署
mv -f WEB-INF/applicationContext.xml WEB-INF/applicationContext.dis
mv -f WEB-INF/applicationContext.dev WEB-INF/applicationContext.xml
cd ..

#增量同步
echo ">> rsync..."
rsync -rtzvlp --delete web web@$SERVER:$SERVER_DIR

rm -rf web

echo ">> start tomcat,remote debug port on 8000..."
ssh web@$SERVER "export JAVA_HOME=$JAVA_HOME; export JRE_HOME=$JRE_HOME;cd $TOMCAT_HOME; sh bin/catalina.sh jpda start; tail -f logs/catalina.out;"

+1
顶部