Linux中部署JAVA程序

时间:2022-05-17 15:16:13

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

JAVA是跨平台的编程语言,服务器的操作系统可以是Windows、Linux或者其它,下面将在Redhat6操作系统下,

详细说明JAVA程序在WEB服务器和应用服务器上的部署情况。

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

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

Linux中部署JAVA程序

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
  1. package com.test;  
  2.   
  3. import org.apache.log4j.Logger;  
  4. import org.apache.log4j.PropertyConfigurator;  
  5.   
  6. public class HelloWorld {  
  7.     private static Logger log = Logger.getLogger(HelloWorld.class);  
  8.       
  9.     public static void main(String[] args) {  
  10.         try{  
  11.             //log4j.properties变量的值在脚本bin/run.sh 中读取  
  12.             String config = System.getProperty("log4j.properties");  
  13.             if (config != null) {  
  14.                 PropertyConfigurator.configure(config);  
  15.             }  
  16.             log.info("HelloWorld");  
  17.               
  18.             Thread thread = new Thread(){  
  19.                 public void run(){  
  20.                     while(true){  
  21.                         try {  
  22.                             Thread.sleep(5*1000);  
  23.                             log.info("每隔5秒打印一下日志");  
  24.                         } catch (InterruptedException e) {  
  25.                             e.printStackTrace();  
  26.                             log.error(e.getMessage());  
  27.                         }  
  28.                     }  
  29.                 }  
  30.             };  
  31.             thread.run();  
  32.         } catch (Exception e) {  
  33.             log.error("[X]启动失败:"+e.getMessage());  
  34.             System.exit(1);  
  35.         }  
  36.     }  
  37.   
  38. }  

(2)编写shell启动脚本run.sh

[cpp] view plain copy
  1. #! /bin/sh  
  2.   
  3. #-------------------------------------------------------------------  
  4. # 定义变量  
  5. #-------------------------------------------------------------------  
  6. APP_NAME=HelloWorld  
  7. GREP_KEY="Diname="${APP_NAME}  
  8.   
  9. # -Xms512m 设置JVM堆的初始内存  
  10. # -Xmx1024m 设置JVM堆的最大内存  
  11. # -Dlog4j.properties 设置log4j日志文件参数,可给JAVA程序调用,调用格式是System.getProperty("log4j.properties")  
  12. APP_OPTS="-Xrs -Xms512m -Xmx1024m -Dlog4j.properties=../conf/log4j.properties"  
  13.   
  14. # 程序主类  
  15. APP_CLASS="com.test.HelloWorld"  
  16.   
  17. # 日志文件  
  18. APP_LOG="../logs/log.log"  
  19.   
  20. # 模块运行需要的lib  
  21. APP_LIBS=./:`ls ../lib/*.jar | paste -s -d":" -`  
  22.   
  23. # 当前的类路径=当前模块的类路径+JDK的类路径  
  24. APP_CLASSPATH=${APP_LIBS}:.:${CLASSPATH}  
  25.   
  26. # 检查HelloWorld进程是否已经在运行,如果在运行则返回1,否则返回0  
  27. is_exist(){  
  28.     # ps -ef : 查询所有进程  
  29.     # grep -w "${GREP_KEY}" : 从所有进程中查出名称为HelloWorld的进程,-w为精确查找  
  30.     # grep -v "grep" : 排除名称为grep的进程  
  31.     # awk '{print $2}' : 输出第二个参数,也就是进程号  
  32.     pid=`ps -ef | grep -w "${GREP_KEY}" | grep -v "grep" | awk '{print $2}'`  
  33.   
  34.     # 判断进程号是否为空  
  35.     if [ -z "${pid}" ]  
  36.         then return 1  
  37.     else   
  38.         return 0  
  39.     fi  
  40. }  
  41.   
  42. # 打印HelloWorld进程的状态信息  
  43. status(){  
  44.     is_exist   
  45.     if [ $? -eq "0" ]  
  46.         then echo "${APP_NAME} is running. pid=${pid} ."  
  47.     else  
  48.         echo "${APP_NAME} is not running"  
  49.     fi  
  50. }  
  51.   
  52. # 启动HelloWorld进程  
  53. start(){  
  54.     is_exist   
  55.     if [ $? -eq "0" ]  
  56.         then echo "${APP_NAME} is already running. pid=${pid} ."  
  57.         return 0  
  58.     else  
  59.         echo "try to start ${APP_NAME} ... "  
  60.   
  61.         # 调用nohup命令启动HelloWorld  
  62.         # 1>&- : 表示关闭标准输出日志到nohup.out    
  63.         # 2>${APP_LOG} : 表示输出日志到../logs/log.log  
  64.         # 最后的& : 表示退出帐户/关闭终端时程序不退出  
  65.                 nohup $JAVA_HOME/bin/java -${GREP_KEY} ${APP_OPTS} -classpath ${APP_CLASSPATH} ${APP_CLASS} 1>&- 2>${APP_LOG} &  
  66.   
  67.         # 程序的启动需要一定的时间,这里设置暂停时间(3秒),单位是秒  
  68.                 sleep 3  
  69.   
  70.                 is_exist  
  71.                 if [ $? -eq "0" ]  
  72.                 then  
  73.                         echo "${APP_NAME} is running now. pid=${pid}."  
  74.                         return 0  
  75.                 else  
  76.                         echo "failed to start ${APP_NAME}! see ${APP_LOG} for more details."  
  77.                         return 1  
  78.                 fi  
  79.     fi  
  80. }  
  81.   
  82. # 停止HelloWorld进程  
  83. stop()  
  84. {  
  85.     is_exist  
  86.   
  87.     if [ $? -eq 0 ]  
  88.         then    echo "try to stop ${APP_NAME} ..."  
  89.   
  90.             # 调用kill命令杀掉进程  
  91.             /usr/bin/kill -9  ${pid}  
  92.   
  93.             if [ $? -ne 0 ]  
  94.                 then echo "failed to stop ${APP_NAME}!"  
  95.                 return 1  
  96.             else  
  97.                 echo "${APP_NAME} stopped."  
  98.                 return 0  
  99.             fi  
  100.     else  
  101.         echo "${APP_NAME} is not running!"  
  102.         return 1  
  103.     fi  
  104. }  
  105.   
  106. # 重启HelloWorld进程  
  107. restart(){  
  108.     stop  
  109.     start  
  110. }  
  111.   
  112. # 显示帮助信息  
  113. help()  
  114. {  
  115. echo "status                    show the status of ${APP_NAME} server."  
  116. echo "start                     start the ${APP_NAME} server."  
  117. echo "stop                      stop the ${APP_NAME} server."  
  118. echo "restart                   restart the ${APP_NAME} server."  
  119. }  
  120.   
  121. # 主函数  
  122. main()  
  123. {  
  124.     case "$1" in   
  125.     status)   status;;  
  126.     start)    start;;  
  127.     stop)     stop;;  
  128.     restart)  restart;;  
  129.     *)        echo "command param error ! see follow help "; help;;  
  130.     esac  
  131. }  
  132.   
  133. # 执行主函数 $1表示选择第一个字符串为参数,比如终端命令是:./run.sh start status,则选择start为输入参数  
  134. main $1  

(3)编写日志配置文件log4j.properties

[plain] view plain copy
  1. #stdout  
  2. log4j.rootLogger=INFO, logfile  
  3.   
  4. #File  
  5. log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender  
  6. log4j.appender.logfile.File=../logs/log.log  
  7. log4j.appender.logfile.Append=true  
  8. log4j.appender.logfile.Threshold =INFO   
  9. log4j.appender.logfile.DatePattern='.'yyyy-MM-dd  
  10. log4j.appender.logfile.layout=org.apache.log4j.PatternLayout  
  11. 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 

Linux中部署JAVA程序

 查看日志文件logs/log.log中的内容

Linux中部署JAVA程序

至此,JAVA程序HelloWorld已经在LINUX上部署完成。

 转载地址:http://blog.csdn.net/brushli/article/details/12106339