一、為什么要這么做?
在windows的服務器中,通過打開一個cmd窗口,執行java --jar xxxx.jar的方式,每一個cmd窗口,相當於一個臨時session會話,當cmd窗口關閉之后,啟動的java程序就停止了。
為了避免這種情況的發生,需要將執行jar包,以后台進程的方式執行jar包,類似linux服務器,以nohup java -jar xxx.jar的方式。
二、使用WinSW將jar包做成windows服務
2.1 實現步驟
1、下載WinSW 64位:https://github.com/winsw/winsw/releases
2、將下載的WinSW.NET4.exe文件復制到jar程序所在文件夾中(我的jar包是research.jar)
3、將WinSW.NET4.exe重命名為research.exe(和jar同名)
4、在同目錄下新建一個xml文件,命名為research.xml,寫入以下內容
<service>
<id>research</id>
<name>research</name>
<description>research</description>
<env name="JAVA_HOME" value="%JAVA_HOME%"/>
<executable>java</executable>
<arguments>-jar "C:\Users\lyr\Desktop\test\research.jar"</arguments>
<startmode>Automatic</startmode>
<logpath>D:logs\log</logpath>
<logmode>rotate</logmode>
</service>
5、xml補充說明
id,name,description我都寫成了和jar包相同的名稱
arguments:-jar后面寫上自己jar包的路徑
logpath:log文件路徑
6、運行:以管理員運行cmd進入jar所在的目錄,然后執行research.exe install
C:\Users\lyr\Desktop\test>research.exe install
Installing service 'research (research)'...
Service 'research (research)' was installed successfully.
7、出現上圖的"Service 'research (research)' was installed successfully",表示服務安裝成功,然后去Windows服務里面啟動服務(服務名稱是research)
2.2 卸載已經安裝的服務
以管理員運行cmd進入jar所在的目錄,然后執行research.exe uninstall
2.3 評價
確實能運行項目,也能在自定義的log路徑看到log執行日志
不方便的地方:每次修改一個地方的代碼,都得停止服務,更新jar包,然后再啟動服務。
2.4 可能遇到的問題
部署之后,服務啟動不成功
解決方法一:對服務,右鍵選擇屬性,選擇登錄,勾選允許服務與桌面交互
解決方法二:使用全新的WinSW-x64.exe再設置一遍服務。
三、一個比較傻的方法(不推薦)
下面的源碼得放在bat文件(可以先寫在txt文件,然后改為bat后綴)
評價:點擊確實可以運行服務,但是在任務管理器看到的名稱是java(TM)的,如果是運行多個項目,那么根本分不清楚是哪個項目,所以不推薦。
@echo off
start javaw -jar C:\Users\lyr\Desktop\test\research.jar
exit