首页 > 代码库 > 线上JAVA项目的目录结构分析,以及启动停止脚本

线上JAVA项目的目录结构分析,以及启动停止脚本

一般来说,JAVA项目最终上线都是以JAR或者WAR的形式发布


WAR的话就是WEB工程,JAR的话就是普通JAVA工程,可以直接启动,无需任何容器的


一般比较的固定的目录结构:

项目名称demo

demo/bin这里一般是启动和停止脚本  start.sh  stop.sh

demo/conf  系统配置文件

demo/base war工程的话,将war包放此

demo/***

demo/lib  war工程的话,不需要,因为war工程通过mvn构建,引用的jar包都会打在war包里,如果是jar工程的话,需要此目录存放你的jar包(如果也通过mvn打在一起也可以,多的话)

demo/logs  这是必须的,存放log的位置

如何配置log??

<appender name="APP-LOG-FILE" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value=http://www.mamicode.com/"${log.dir.path}/normandy.log" />>
<pre name="code" class="html"><logger name="app-log" additivity="false">
		<level value=http://www.mamicode.com/"${log.level}" />>

这样的话,当你JAVA类里get以上的logger name就可以将log写到demo-log文件里了

重点分析下demo/bin目录下脚本编写:

env.sh

export JAVA_HOME=/usr/*/jdk
export NGINX_HOME=/usr/*/nginx
export JETTY_HOME=/usr/*/jetty
export JETTY_PORT=******
export APP_INSTALL_HOME=****
export APP_LOG_DIR_PATH=****
export LANG=zh_CN.UTF-8

以上是一个示例,包括了JAVA,NGGNX,JETTY,项目目录,log目录等等一些变量的配置

start.sh

source ./env.sh

JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n -Dcom.sun.management.jmxremote.port=7788  -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false "

JAVA_OPTS=" -server -Xmx512m -Xms512m  -Xss256K -XX:PermSize=128M -XX:MaxPermSize=128M  -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC  -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCompressedOops -XX:CMSInitiatingOccupancyFraction=70 -XX:+HeapDumpOnOutOfMemoryError -XX:SurvivorRatio=8 "

JAVA_OPTS=${JAVA_OPTS}"  *** -Dlog_path="${LOG_PATH}

$SYS_ECHO "starting......,please wait ..."

${JAVA_HOME}/bin/java ${JAVA_DEBUG_OPTS} ${JAVA_OPTS} -jar ${APP_PATH}/*.jar
 
******

这里的JAVA——OPTS是用来配置一些java启动参数,以及项目的系统参数-D 参数通过System.getProperty来获取

stop.sh

pids=`${JAVA_HOME}/bin/jps | grep **|awk '{print $1}'`
for pid in $pids
  do
   kill -9 $pid
 done
}
循环将启动的该**进程全部杀死,即停止

如果是war包工程的话

ps -ef | grep 容器 | awk ‘{pring $1}‘

有tomcat容器,jetty容器等等










线上JAVA项目的目录结构分析,以及启动停止脚本