我们很多功能都可能需要做成一个程序来启动,启动方式无非就是在命令行敲上: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 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 &
/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
好了就讲到这里。