Linux中部署JAVA程序

Java程序在开发完成后,需要部署到服务器,如果是WEB项目,需要部署到WEB服务器,否则部署到应用服务器。

JAVA是跨平台的编程语言,服务器的操作系统可以是Windows、Linux或者其它,下面将在RedHat6操作系统下,详细说明JAVA程序在WEB服务器和应用服务器上的部署情况。

1、JAVA程序部署在应用服务器

(1) JAVA程序HelloWorld 在Redhat6上部署的目录结构

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

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

#! /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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/b13f14065e86a5b74af318bfb57395ff.html