java服务器浅入浅出之简略的java程序发布

本篇将记录下一个简单的java程序在linux上的部署设置,以及发布脚本的编写。粗糙、简略。  //神奇!勿动

1.首先写了一个简单的java程序,一个死循环,不停地输出一句话。


2.把工程共享到svn上。


3.编写publish_test.sh脚本,实现svn源码的检出,调用ant编译、打包,以及其他准备操作。

<span style="font-size:18px;">. /home/testjava/publish/config.sh

mkdir -p ${PUBLISH_TEST_SVN_ROOT}
if [ `ls -la ${PUBLISH_TEST_SVN_ROOT} | wc -l` == 3 ]
then
        svn checkout ${URL_SVN_TEST_ROOT} ${PUBLISH_TEST_SVN_ROOT}
else
        svn update ${PUBLISH_TEST_SVN_ROOT}
fi

ant -buildfile ${PUBLISH_TEST_ROOT}/build.xml clean
ant -f ${PUBLISH_TEST_ROOT}/build.xml
mkdir -p ${PUBLISH_TEST_LOGS_ROOT}
touch ${PUBLISH_TEST_LOG}</span>
其中config.sh中是预先声明好的一些路径信息。


4.利用ant将工程编译、打包。这里要编写配置文件。我用的默认名字build.xml。

<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="build" name="test">
        <property environment="env"/>
        <property name="root.path" value="/home/testjava/publish"/>
        <property name="db.path" value="${root.path}/testjava"/>
        <property name="db.svn.path" value="${db.path}/svn"/>
        <property name="db.source.path" value="${db.svn.path}/src"/>
        <property name="db.lib.path" value="${db.svn.path}/libs"/>
        <property name="db.output.path" value="${db.path}/output"/>
        <property name="db.binout.path" value="${db.output.path}/bin"/>
        <property name="db.jarout.path" value="${db.output.path}/jar"/>
        <property name="db.jar.name" value="testjava.jar"/>
        <property name="debuglevel" value="source,lines,vars"/>
        <property name="target" value="1.6"/>
        <property name="source" value="1.6"/>

        <path id="db.classpath">
                <fileset file="${db.lib.path}/*.jar">
                </fileset>
        </path>

        <target depends="build-db,pack-db" name="build"/>

        <target name="init">
                <mkdir dir="${db.binout.path}"/>
                <mkdir dir="${db.jarout.path}"/>
        </target>

        <target name="clean">
                <delete dir="${db.binout.path}"/>
                <delete file="${db.jarout.path}/${db.jar.name}"/>
        </target>

        <target depends="init" name="build-db">
                <javac debug="true" debuglevel="${debuglevel}" destdir="${db.binout.path}" source="${source}" target="${target}" includeantruntime="on" encoding="utf8">
                <src path="${db.source.path}"/>
                <classpath refid="db.classpath"/>
                </javac>
        </target>

        <target name="pack-db">
                <jar destfile="${db.jarout.path}/${db.jar.name}" basedir="${db.binout.path}"/>
        </target>
</project></span>

这里的clean可以设置为build的依赖,我没有这么写而已。 javac将源码编译成class,jar将class打包成jar包。


5.编写以服务器形式运行jar包工程的脚本。start.sh

<span style="font-size:18px;">java -Dserver_name=/home/testjava/publish/testjava/output -Djava.net.preferIPv4stack=true -server -Xmx1g -Xmn512m -cp /home/testjava/publish/testjava/output/jar/* test.system.Main</span>


6.建立一个系统服务testjava,目标是运行start.sh。

首先在/etc/init.d 下写服务脚本testjava.sh。

<span style="font-size:18px;">#!/bin/sh
#chkconfig: 35 20 80
#description: testjava server

EXEC_PATH=/home/testjava/publish/testjava/output
EXEC=start.sh
pid=""

if [ -x $EXEC+path/%EXEC ]; then
echo "project not found..."
exit 1
fi

getpid()
{
pid=`ps axjf | grep "Dserver_name=${EXEC_path}" | grep -v "grep" | awk '{print $2}'`
}

stop()
{
getpid
if [ -z ${pid} ]
then
        echo "ERROR : server has not been started..."
else
        echo "server is stoping..."
        kill -15 ${pid}
fi
}

start()
{
getpid
if [ -z ${pid} ]
then
        echo "server is starting..."
        cd ${EXEC_PATH}
        ./${EXEC} >>logs/log 2>&1 &
else
        echo "ERROR : server has been started already..."
fi
}

restart() {
  stop
  start
}

case "$1" in
        start)
        start
        ;;
        stop)
        stop
        ;;
        restart)
        restart
        ;;
        status)
        status
        ;;
  *)
    echo "Usage: service $EXEC {start|stop|restart|status}"
    exit 1
esac

exit 0</span>

其中log重定向时 2>&1 是将错误信息转作普通信息输出到标准输出  &是将这条语句在后台运行。

最后 chkconfig --add autoruntest 添加服务。


7.编写最终的启动、停止脚本。

startall.sh

service testjava.sh start
stopall.sh

service testjava.sh stop


至此,一个简单的发布流程就完成了。每当版本更新需要发布时,如果服务器在运行中,先运执行stopall.sh。然后执行publish_test.sh发布。最后执行startall.sh启动。运行时log在预先重定向的logs/log文件中查看。

====================================================================  -- end

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。