最近項目中需要使用java服務,但是java服務已經寫好了,就等待部署到windows服務中,遇到了種種困難------在x64服務器中部署jdk x64編譯的jar時,遇到了各種糾結。
本文找到了一種解決方案(在x64服務器、jdk x64 java環境中部署java服務的解決方案):
首先,我們選測的工具是JavaService.exe,目前最新版本是:2.0.10
下載地址:http://forge.ow2.org/projects/javaservice/
之后,解壓下載的
再最后,編譯待部署的java服務程序jar包:
再之后,整理部署java服務的目錄結構:
1,建立java服務安裝目錄為:D:\Java_Study\windowsservice\JavaService_2_0_10-amd64
2,拷貝編譯好的TestTimer.jar包到服務安裝目錄的根目錄下:D:\Java_Study\windowsservice\JavaService_2_0_10-amd64\TestTimer.jar;
及拷貝TestTimer工程依賴的外部包log4j-1.2.17.jar到服務安裝目錄的根目錄下:D:\Java_Study\windowsservice\JavaService_2_0_10-amd64\bin\log4j-1.2.17.jar;
3,把JavaService_2_0_10-amd64.zip解壓出的JavaService.exe文件拷貝到D:\Java_Study\windowsservice\JavaService_2_0_10-amd64\JavaService.exe;
4, 整理install.bat和uninstall.bat。
install.bat:

1 @echo off 2 rem 修改控制台顏色 3 color 1d 4 rem * 使用JavaService將TestTimer安裝為Windows服務的腳本 5 rem * 6 rem * JavaService - Windows NT Service Daemon for Java applications 7 rem * Copyright (C) 2006 Multiplan Consultants Ltd. LGPL Licensing applies 8 rem * Information about the JavaService software is available at the ObjectWeb 9 rem * web site. Refer to http://javaservice.objectweb.org for more details. 10 rem 開始批處理文件中環境改動的本地化操作,在使用endlocal后環境將恢復到原先的內容 11 SETLOCAL 12 rem 設置環境變量,指向當前路徑 13 SET BASE_PATH=%CD% 14 rem 設置Java path: jre_home 15 SET JRE_HOME=D:\Java_Study\Java\jdk1.7.0_79 16 17 rem 判斷JRE_HOME是否正確 18 if "%JRE_HOME%" == "" goto no_java 19 if not exist "%JRE_HOME%\bin\java.exe" goto no_java 20 21 rem 設置jvm內存分配情況 22 set JVM_MEMORY=-Xms128m -Xmx256m 23 rem 設置jvmdll使用哪一種模式 24 SET jvmdll=%JRE_HOME%\jre\bin\server\jvm.dll 25 if not exist "%jvmdll%" goto no_java 26 27 rem 設置JavaService路徑 28 set JSBINDIR=D:\Java_Study\windowsservice\JavaService_2_0_10-amd64 29 set JSEXE=%JSBINDIR%\JavaService.exe 30 31 rem 判斷jar是否正確 32 SET acctjar=%BASE_PATH%\TestTimer.jar 33 if not exist "%acctjar%" goto no_peer 34 35 @echo . Using following version of JavaService executable: 36 @echo . 37 "%JSEXE%" -version 38 @echo . 39 40 rem parameters and files seem ok, go ahead with the service installation 41 @echo . 42 43 rem 處理該批處理的輸入參數,后台服務啟動模式:自動 44 SET svcmode= 45 if "%1" == "-manual" SET svcmode=-manual 46 if "%1" == "-auto" SET svcmode=-auto 47 48 rem 設置JAVA_OPTS 49 set JAVA_OPTS=%JAVA_OPTS% -Djava.class.path="%BASE_PATH%\bin\log4j-1.2.17.jar;%BASE_PATH%\TestTimer.jar" 50 set JAVA_OPTS=%JAVA_OPTS% %JVM_MEMORY% 51 52 rem 設置startstop 53 SET START_STOP=-start cn.test.timer.TestTimer 54 55 56 rem 設置Log文件路徑 57 set OUT_ERR=-out "%BASE_PATH%\service_out.log" -err "%BASE_PATH%\service_err.log" 58 59 rem 設置desp 60 set DESP=-description "TestTimer Service" 61 62 rem 設置執行命令行 63 set runcmd="%JSEXE%" -install TestTimerService 64 set runcmd=%runcmd% "%jvmdll%" 65 set runcmd=%runcmd% %JAVA_OPTS% 66 set runcmd=%runcmd% %START_STOP% 67 set runcmd=%runcmd% %OUT_ERR% 68 set runcmd=%runcmd% -current 69 set runcmd=%runcmd% "%BASE_PATH%" 70 set runcmd=%runcmd% %svcmode% 71 set runcmd=%runcmd% -overwrite 72 set runcmd=%runcmd% -startup 6 73 set runcmd=%runcmd% %DESP% 74 echo %runcmd% 75 76 rem 執行安裝命令 77 %runcmd% 78 rem 啟動服務 79 net start TestTimerService 80 81 if ERRORLEVEL 1 goto js_error 82 goto end 83 :no_java 84 @echo . 沒有Java運行環境,安裝腳本不能運行 85 goto error_exit 86 :no_peer 87 @echo . 啟動文件TestTimer.jar不存在,安裝腳本不能運行 88 goto error_exit 89 :no_jsexe 90 @echo . 可執行文件JavaService.exe 不存在,安裝腳本不能運行 91 goto error_exit 92 :js_error 93 @echo . TestTimerService在安裝為服務的過程中發生了錯誤,請檢查相關日志文件 94 goto error_exit 95 :error_exit 96 97 @echo . 98 @echo . 安裝失敗,不能將 TestTimer安裝為Windows服務 99 @echo . 100 @echo . 命令格式: 101 @echo . 102 @echo . %~n0 [-auto / -manual] [-np] 103 @echo . 104 @echo . 其中: 105 @echo . -auto (默認) or -manual 參數說明了服務的啟動模式:自動或者手動 106 @echo . -np 批處理命令執行完畢后不暫停 107 @echo . 108 @echo . 比如: 109 @echo . %~n0 -auto -np 110 :end 111 112 ENDLOCAL 113 @echo . 114 if "%2" NEQ "-np" @pause
uninstall.bat

1 @echo off 2 3 rem 修改控制台顏色 4 color 1d 5 6 rem * 使用JavaService卸載TestTimerService服務的腳本 7 rem * 8 rem * JavaService - Windows NT Service Daemon for Java applications 9 rem * Copyright (C) 2006 Multiplan Consultants Ltd. LGPL Licensing applies 10 rem * Information about the JavaService software is available at the ObjectWeb 11 rem * web site. Refer to http://javaservice.objectweb.org for more details. 12 13 rem 開始批處理文件中環境改動的本地化操作,在使用endlocal后環境將恢復到原先的內容 14 SETLOCAL 15 16 rem 設置環境變量 17 SET BASE_PATH=D:\Java_Study\windowsservice 18 19 rem 設置JavaService的路徑 20 set JSBINDIR=%BASE_PATH%\JavaService_2_0_10-amd64 21 set JSEXE=%JSBINDIR%\JavaService.exe 22 23 rem 卸載服務前先停止服務 24 net stop TestTimerService 25 26 rem 設置執行命令行 27 set runcmd="%JSEXE%" -uninstall TestTimerService 28 29 %runcmd% 30 31 @echo . 32 33 ENDLOCAL 34 @echo . 35 if "%2" NEQ "-np" @pause
整理后的目錄結構為:
使用JavaService.exe部署Java服務並啟動服務:
運行install.bat
運行過程中,如果正行,cmd屏幕信息如下:
安裝目錄結構變化:
停止並卸載服務:
運行uninstall.bat.
運行過程中,如果正行,cmd屏幕信息如下:
參考文章:《【JavaService】部署Java jar為Windows后台服務 http://blog.csdn.net/alibert/article/details/49944721》
《JavaService將jar發布為windows 服務 http://blog.csdn.net/alibert/article/details/49944823》