通过批处理来启动java jar程序

我们很多功能都可能需要做成一个程序来启动,启动方式无非就是在命令行敲上:java -jar xxx.jar [参数1,参数2] 。这样虽然比较简单,但是还是有些不方便的地方。

接下来跟大家讲讲怎么样通过写批出来脚本来实习jar程序的启动。

首先,我们需要自己的jar包及它的依赖jar包,假如放在lib目录下,配置文件conf.properties在conf目录下,然后我们的启动脚本放在bin目录下。

接下来就是编写我们的脚本,假设这个脚本取名叫 start.bat :

@echo off
set BASE_HOME=%cd%\..
set JAVA="Z:\base\tools\JDK\jdk7_71\bin\java.exe"
set JAVA_OPTS=-Xmx512m
set CONF="%BASE_HOME%\conf\conf.properties"

if not exist "%BASE_HOME%\lib\Kafka2syslog*.jar" (
@echo "配置的KAFKA2SYSLOG_HOME路径不正确"
@pause
exit
)
if not exist %JAVA% (
@echo "没有找到JDK,请安装JDK1.6-64位"
@pause
exit
)
if not exist %CONF% (
@echo "没有找到conf.properties"
@pause
exit
)

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin

%JAVA% %JAVA_OPTS% -Dlog4j.configuration=file:///%BASE_HOME%/conf/log4j.properties -cp "%BASE_HOME%\lib\*"  -Dconfig.path=%CONF% com.coreware.kafka.KafkaConsumer

这样通过简单的一些判断来实现对环境的检测,如果环境满足,则继续运行。

我们的jar包使用到了log4j的配置,参数传递的方式是通过 -D,java内部获取这个参数可以通过System.getProperty("config.path") 来获取,如果不是通过 -D的方式,直接传入,像这样:-config.path=xxx ,则在代码里面获取的方式是 通过main方法的args数组参数来获取。

接着就是我们的主类了 com.coreware.kafka.KafkaConsumer 。这里需要注意的是,-D传参数应该放到主类前面,直接传则放到主类后面。

@echo off
if "%1" == "h" goto begin
rem mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin


 
 

这一段代码是让脚本能后台运行,如果你只需要前台运行的话,则可注释掉第三句。使用 rem 注释,像这样:

rem mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit

然后我们双击这个脚本即可启动程序,如果我们的软件包换了目录,完全不需要修改,而且这个脚本只需要稍微的修改一下即可用到别的地方,是不是很方便。

其实我们掌握了规律,知道一个jar程序启动需要哪些东西,也可以很快的把shell脚本写出来。

例如:

nohup /home/jst/jdk1.7.0_71/bin/java -Xmx512m -Dlog4j.configuration=file:/home/jst/Kafka2syslog/conf/log4j.properties -Dconfig.path=../conf/conf.properties -cp "../lib/*" com.coreware.kafka.KafkaConsumer > /dev/null 2>&1 &


这里使用nohup来启动,可以让jar程序在后台启动,如果需要前台只需要简单的修改一下启动命令即可,就像这样:

/home/jst/jdk1.7.0_71/bin/java -Xmx512m -Dlog4j.configuration=file:/home/jst/Kafka2syslog/conf/log4j.properties -Dconfig.path=../conf/conf.properties -cp "../lib/*" com.coreware.kafka.KafkaConsumer

这里的-cp 指的是-classpath 你也可以写全名,来指定jar包、依赖jar包的路径,使它们能够加载到JVM去运行。

好了就讲到这里。



你可能感兴趣的:(脚本,jar程序)