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

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 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)启动程序

在终端目录/opt/HelloWorld/bin下,输入命令:./run.sh start

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

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

2、JAVA WEB程序部署在TOMCAT服务器

待续...

Linux中部署JAVA程序的更多相关文章

  1. linux系统部署Java程序获取ip时报Caused by: java.net.UnknownHostException: XXXXXXXXXX: XXXXXXXXXX: Name or service not known

    问题一: Caused by: java.net.UnknownHostException: XXXXXXXXXX: XXXXXXXXXX: Name or service not known vi ...

  2. CentOS6.5中部署java web环境

    原来在linux中部署java web环境,没有做好总结,这次在部署的过程中,将部署的过程做了记录,希望对大家有帮助.主要内容包括CentOS安装以后的网络设置,系统自带jdk的卸载,新版本jdk的安 ...

  3. 【转】Tomcat中部署java web应用程序

    http://www.blogjava.net/jiafang83/archive/2009/06/02/279644.html 转载:今天给大家介绍怎样在Tomcat5.5.9中部署Java Web ...

  4. 在Tomcat中部署Java Web应用程序

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署      静态部署指的是我们在服务器启动之前部 ...

  5. Tomcat中部署Java Web应用程序的方式

    Tomcat中部署Java Web应用程序的几种方式: #PetWeb是工程名 1.在TOMCAT_HOME\conf\server.xml文件的HOST节点中加入 <Context docBa ...

  6. 在Tomcat中部署Java Web应用程序几种方式

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署      静态部署指的是我们在服务器启动之前部 ...

  7. 如何使用加多宝(jdb)在linux下调试Java程序

    毕业时写了一段时间的C,那时候调试使用gdb,后来转了java,当时就想java程序怎么调试,找了一下,果然,那就是jdk自带的jdb windows里是这样的 Linux下是这样的 一般我在linu ...

  8. 在dos中运行java程序,若出现Exception in thread “main" java.lang.NoClassDefFoundError

    在dos中运行java程序,若出现Exception in thread “main" java.lang.NoClassDefFoundError,可以检查一下几项: 环境变量配置: 注意 ...

  9. HTML文件中使用Java程序

    HTML文件中使用Java程序:简而言之,在HTML文件中引入java应用程序,并通过javascript调用其方法.   一. 运行环境 1.JAVA_HOME.CLASSPATH.PATH配置正确 ...

随机推荐

  1. 创建第一个freemarker

    1.创建java项目TestFreeMarker 2.导入包freemarker.jar,添加依赖 3.在根目录下创建一个文件夹templates 4.在文件夹templates下创建文件a.ftl ...

  2. CMA连续物理内存用户空间映射---(一)

    背景: 在多媒体和图像处理等应用中,经经常使用到大块内存,尤其是硬件编解码.须要内核分配大块的物理连续内存. 这里希望通过把从内核分配的连续物理内存映射到用户空间.在用户空间经过处理,又能够入队到驱动 ...

  3. POJ 2697 A Board Game (bfs模拟)

    比较水的一道题,在4*4的棋盘上有黑白子,现在有某种移动方式,问能否通过它将棋盘从某个状态移动到另一种状态 只要想好怎么保存hash表来去重,其他就差不多了... #include <iostr ...

  4. CCSpawn使用CCRepeatForever无效

    在使用CCSpawn中加入CCRepeatForever,但却无法使用CCRepeatForever的效果. CCActionInterval* action =(CCActionInterval*) ...

  5. HTML1.0 - html 环境搭建 开发工具

    1. mac  电脑 2. Hbuilder 开发软件 3. 学习基础 HTML 语法 网站  http://www.w3school.com.cn

  6. 调用有道翻译API

    前两天朋友说起NASA开放了数据API,今儿突然想起从来没用过外部提供的API,然而简单用得多的貌似是有道词典API,就像试试,本来觉得应该挺简单的,用urllib模块很快就实现了. 不过测试时才发现 ...

  7. C/C++中的浮点数运算

    代码: #include <iostream> #include <cstdio> #include <cfloat> using namespace std; i ...

  8. PHP echo, print, printf, sprintf函数的区别和使用

    1. echo函数: 输出函数,是命令,不能返回值.echo后面可以跟很多个参数,之间用分号隔开,如: echo $myvar1; echo 1,2,$myvar,"<b>bol ...

  9. 关于js事件冒泡和时间捕获

    (1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. IE 5.5: div -> body -> document IE 6.0: div ...

  10. Swift类和结构体定义-备

    Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { 定义类的成员 } struct 结构体名 { ...