JAVA程序在开发完成后,需要部署到服务器,如果是WEB项目,需要部署到WEB服务器,否则部署到应用服务器。
JAVA是跨平台的编程语言,服务器的操作系统可以是Windows、Linux或者其它,下面将在Redhat6操作系统下,
详细说明JAVA程序在WEB服务器和应用服务器上的部署情况。
1、JAVA程序部署在应用服务器
(1) JAVA程序HelloWorld 在Redhat6上部署的目录结构
bin : 存放shell脚本run.sh
conf :存放配置文件log4j.properties
lib :存放JAR包HelloWorld.jar、log4j-1.2.16.jar
logs:存放程序运行日志文件log.log
(2)编写测试类HelloWorld.java 并打成JAR包HelloWorld.jar
[java] view plain copy- package com.test;
- import org.apache.log4j.Logger;
- import org.apache.log4j.PropertyConfigurator;
- public class HelloWorld {
- private static Logger log = Logger.getLogger(HelloWorld.class);
- public static void main(String[] args) {
- try{
- //log4j.properties变量的值在脚本bin/run.sh 中读取
- String config = System.getProperty("log4j.properties");
- if (config != null) {
- PropertyConfigurator.configure(config);
- }
- log.info("HelloWorld");
- Thread thread = new Thread(){
- public void run(){
- while(true){
- try {
- Thread.sleep(5*1000);
- log.info("每隔5秒打印一下日志");
- } catch (InterruptedException e) {
- e.printStackTrace();
- log.error(e.getMessage());
- }
- }
- }
- };
- thread.run();
- } catch (Exception e) {
- log.error("[X]启动失败:"+e.getMessage());
- System.exit(1);
- }
- }
- }
(2)编写shell启动脚本run.sh
[cpp] view plain copy- #! /bin/sh
- #-------------------------------------------------------------------
- # 定义变量
- #-------------------------------------------------------------------
- APP_NAME=HelloWorld
- GREP_KEY="Diname="${APP_NAME}
- # -Xms512m 设置JVM堆的初始内存
- # -Xmx1024m 设置JVM堆的最大内存
- # -Dlog4j.properties 设置log4j日志文件参数,可给JAVA程序调用,调用格式是System.getProperty("log4j.properties")
- APP_OPTS="-Xrs -Xms512m -Xmx1024m -Dlog4j.properties=../conf/log4j.properties"
- # 程序主类
- APP_CLASS="com.test.HelloWorld"
- # 日志文件
- APP_LOG="../logs/log.log"
- # 模块运行需要的lib
- APP_LIBS=./:`ls ../lib/*.jar | paste -s -d":" -`
- # 当前的类路径=当前模块的类路径+JDK的类路径
- APP_CLASSPATH=${APP_LIBS}:.:${CLASSPATH}
- # 检查HelloWorld进程是否已经在运行,如果在运行则返回1,否则返回0
- is_exist(){
- # ps -ef : 查询所有进程
- # grep -w "${GREP_KEY}" : 从所有进程中查出名称为HelloWorld的进程,-w为精确查找
- # grep -v "grep" : 排除名称为grep的进程
- # awk '{print $2}' : 输出第二个参数,也就是进程号
- pid=`ps -ef | grep -w "${GREP_KEY}" | grep -v "grep" | awk '{print $2}'`
- # 判断进程号是否为空
- if [ -z "${pid}" ]
- then return 1
- else
- return 0
- fi
- }
- # 打印HelloWorld进程的状态信息
- status(){
- is_exist
- if [ $? -eq "0" ]
- then echo "${APP_NAME} is running. pid=${pid} ."
- else
- echo "${APP_NAME} is not running"
- fi
- }
- # 启动HelloWorld进程
- start(){
- is_exist
- if [ $? -eq "0" ]
- then echo "${APP_NAME} is already running. pid=${pid} ."
- return 0
- else
- echo "try to start ${APP_NAME} ... "
- # 调用nohup命令启动HelloWorld
- # 1>&- : 表示关闭标准输出日志到nohup.out
- # 2>${APP_LOG} : 表示输出日志到../logs/log.log
- # 最后的& : 表示退出帐户/关闭终端时程序不退出
- nohup $JAVA_HOME/bin/java -${GREP_KEY} ${APP_OPTS} -classpath ${APP_CLASSPATH} ${APP_CLASS} 1>&- 2>${APP_LOG} &
- # 程序的启动需要一定的时间,这里设置暂停时间(3秒),单位是秒
- sleep 3
- is_exist
- if [ $? -eq "0" ]
- then
- echo "${APP_NAME} is running now. pid=${pid}."
- return 0
- else
- echo "failed to start ${APP_NAME}! see ${APP_LOG} for more details."
- return 1
- fi
- fi
- }
- # 停止HelloWorld进程
- stop()
- {
- is_exist
- if [ $? -eq 0 ]
- then echo "try to stop ${APP_NAME} ..."
- # 调用kill命令杀掉进程
- /usr/bin/kill -9 ${pid}
- if [ $? -ne 0 ]
- then echo "failed to stop ${APP_NAME}!"
- return 1
- else
- echo "${APP_NAME} stopped."
- return 0
- fi
- else
- echo "${APP_NAME} is not running!"
- return 1
- fi
- }
- # 重启HelloWorld进程
- restart(){
- stop
- start
- }
- # 显示帮助信息
- help()
- {
- echo "status show the status of ${APP_NAME} server."
- echo "start start the ${APP_NAME} server."
- echo "stop stop the ${APP_NAME} server."
- echo "restart restart the ${APP_NAME} server."
- }
- # 主函数
- main()
- {
- case "$1" in
- status) status;;
- start) start;;
- stop) stop;;
- restart) restart;;
- *) echo "command param error ! see follow help "; help;;
- esac
- }
- # 执行主函数 $1表示选择第一个字符串为参数,比如终端命令是:./run.sh start status,则选择start为输入参数
- main $1
(3)编写日志配置文件log4j.properties
[plain] view plain copy- #stdout
- log4j.rootLogger=INFO, logfile
- #File
- log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
- log4j.appender.logfile.File=../logs/log.log
- log4j.appender.logfile.Append=true
- log4j.appender.logfile.Threshold =INFO
- log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
- log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
- log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %5p %c{1}:%L - %m%n
(4)启动程序
在终端目录/opt/HelloWorld/bin下,输入命令:./run.sh start
查看日志文件logs/log.log中的内容
至此,JAVA程序HelloWorld已经在LINUX上部署完成。
转载地址:http://blog.csdn.net/brushli/article/details/12106339