1. 程式人生 > >使用Daemon將java程式執行為後臺service

使用Daemon將java程式執行為後臺service

我們有時候可能需要將java程式執行成為後臺service,我們可以使用apache daemon來實現,藉助裡面的函式,編寫我們的bat指令碼,然後執行該指令碼,即可將我們的程式執行為一個service

下面我們來做一個小demo:

例如,我們需要將下面的測試程式執行成為我們的service,我們編寫兩個方法,一個方法用於啟動service後需要執行的邏輯,一個方法用於停止service後需要執行的邏輯,因為是做測試,所以程式比較簡單,我做的都是獲取連線資料庫的驅動物件:

package com.harderxin.test;

import java.sql.Connection;
import java.sql.DriverManager;

public class DaemonTest {
	
	public static Connection getDBConnection() throws Exception {
		String driverName = "net.sourceforge.jtds.jdbc.Driver";
		String dbURL = "jdbc:jtds:sqlserver://T-SQL01-W2K12/Report_data;instance=INT01";
		Class.forName(driverName);
		Connection dbConn = DriverManager.getConnection(dbURL);
		return dbConn;
	}
	
	/**
	 * the main method
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args)throws Exception {
		System.out.println(getDBConnection());
	}
	
	/**
	 * start method
	 * @param args
	 * @throws Exception
	 */
	public static void start(String[] args)throws Exception{
		System.out.println(getDBConnection());
	}
	
	/**
	 * stop method
	 * @param args
	 * @throws Exception
	 */
	public static void stop(String[] args)throws Exception{
		System.out.println(getDBConnection());
	}
}
這裡面需要一個依賴包:jtds-1.3.1.jar,使用這種方式來獲取資料庫連線的Connection物件。編寫我們的bat指令碼:

"C:\test\daemon\amd64\prunsrv.exe" //TS//TestService --DisplayName="Test Service" ^
        --Install="C:\test\daemon\amd64\prunsrv.exe" --Jvm=auto --StartMode=jvm --StopMode=jvm ^
        --Classpath="C:\test\test.jar" ^
        --LibraryPath="%PATH%;C:\x64\SSO" ^
        --StartClass=com.harderxin.test.DaemonTest --StartMethod=start ^
        --StopClass=com.harderxin.test.Daemon

Test --StopMethod=stop

下面針對上面的Daemon引數一一解釋一下:

"C:\test\daemon\amd64\prunsrv.exe" 表示我們下載的Daemon中的prunsrv.exe檔案,我們就是根據這個程式,然後執行裡面的引數,來將java程式執行成為後臺服務的,它後面接了很多引數:

--DisplayName:顯示為後臺服務的名稱,在windows系統的service服務中顯示出來

--Install:prunsrv.exe執行的具體路徑,根據作業系統的不同,下載後會對應不同的版本:adm64、adm32以及ia64,我們需要根據不同作業系統來決定

--Jvm:jvm的設定,我們可以設定為auto,也可以設定為jre或者jdk的jvm

JVM=%MY_JAVA_HOME%\jre\bin\server\jvm.dll

--StartMode、--StopMode:啟動和停止模式,我們可以選擇jvm

--Classpath:需要執行jar包的位置,可以用正則表示式指定:set "CLASSPATH=%CURRENT_DIR%\lib\*"

--LibraryPath:這個引數是可選的,因為我上面的程式執行需要依賴一個dll檔案:ntlmauth.dll,這個檔案表示我們在連線資料庫驅動的時候可以不使用使用者名稱+密碼的方式,而是採用同一個domain下例項的方式進行的:jdbc:jtds:sqlserver://T-SQL01-W2K12/Report_data;instance=INT01,這就涉及到授權驗證,所以我們需要設定這個dll檔案的環境變數,當然如果我們在本地做測試,可以直接將它拷貝到系統的環境變數中即可

--StartClass:啟動類   --StartMethod:啟動方法

--StopClass:停止類   --StopMethod:停止方法

根據ClassPath+StartClass/StopClass+StartMethod/StopMethod這種jar包+類名+方法名即可執行一個具體的方法

eg:"%EXECUTABLE%" //IS//%SERVICE_NAME% ^
    --Description "%SERVICE_DISPLAY_DESC%" ^
    --DisplayName "%SERVICE_DISPLAY_NAME%" ^
    --ServiceUser "%SERVICE_USER%" ^
    --ServicePassword "%SERVICE_PASSWORD%" ^
    --Install "%EXECUTABLE%" ^
    --LogPath "%LOG_PATH%" ^
    --PidFile "%PID_FILE%" ^
    --Classpath "%CLASSPATH%" ^
    --Jvm "%JVM%" ^
    --StartMode jvm ^
    --StopMode jvm ^
    --StartPath "%CURRENT_DIR%" ^
    --StopPath "%CURRENT_DIR%" ^
    --StartClass %START_CLASS% ^
    --StopClass %STOP_CLASS% ^
    --StartMethod %START_METHOD% ^
    --StopMethod %STOP_METHOD% ^
    --StartParams %START_PARAMS% ^
    --StopParams %STOP_PARAMS% ^
    --Startup "%SERVICE_STARTUP_MODE%" ^
    --JavaHome "%MY_JAVA_HOME%" ^
    --LibraryPath "%PATH%;%JTDS_NTLMAUTH_PATH%" ^
    --JvmMs "%JvmMs%" ^
    --JvmMx "%JvmMx%"

當我們準備完指令碼後,在cmd命令執行該bat指令碼,即可將我們的程式執行為後臺服務。

下面是我這個程式執行的目錄及執行結果:


在後臺service中即可看到我們的Test Service服務:


相關推薦

使用Daemonjava程式執行後臺service

我們有時候可能需要將java程式執行成為後臺service,我們可以使用apache daemon來實現,藉助裡面的函式,編寫我們的bat指令碼,然後執行該指令碼,即可將我們的程式執行為一個service 下面我們來做一個小demo: 例如,我們需要將下面的測試程式執行

Java Service Wrapper Java程式部署成系統服務

在使用Java開發應用程式時,我們通常會打包成Jar包獨立執行,但是在實際生產環境中,伺服器重啟或出現異常時,程式往往不能重啟或隨伺服器開機啟動,所以我們可以採用Java Service Wrapper工具解決這一問題,Wrapper可以將我們的Java程式包裝成系統服務,這樣就可以隨著系統

用eclipse寫成的JAVA程式轉換exe(Windows環境)

做了JAVA課程設計,就想把自己做的遊戲發給小夥伴玩一玩,就算打包成jar,可小夥伴沒有安裝JDK,怎麼辦呢,於是上網搜了關於這個問題的解決辦法併成功的將自己的小程式轉換了 出來,當然其中也遇到不少問題,會用紅色標註我遇到的問題。 轉載自:http://blog.csdn.net/u014470

使用EXE4JJava程式打包成可執行程式(.exe檔案)教程

作者:翁鬆秀 使用EXE4J將Java程式打包成可執行程式(.exe檔案)教程 [TOC] 由於公司需要做一個對資料庫伺服器的監控程式,用的swing來實現的一個java桌面應用程式,所以需要將做好的監控程式打包成.exe檔案,以便監控人員配置監控資訊。所以研究了一下如何

如何Java程式打包成exe可執行檔案

步驟 第一步:將Java程式通過Eclipse或者JRE匯出成Jar包; 第二步:通過exe4j將Jar包程式生成exe可執行檔案。 解決java檔案編譯為class檔案時提示:“錯誤:編碼GBK

用eclipse寫成的JAVA程式轉換exe(實用!)

做了JAVA課程設計,就想把自己做的遊戲發給小夥伴玩一玩,就算打包成jar,可小夥伴沒有安裝JDK,怎麼辦呢,於是上網搜了關於這個問題的解決辦法併成功的將自己的小程式轉換了 出來,當然其中也遇到不少問題,會用紅色標註我遇到的問題。 轉載自:http://blog.csdn.

使用exe4jjava程式打包成exe可執行檔案

1.將java程式打包成jar 使用第三方外掛fatjar生成jar檔案,將net.sf.fjep.fatjar_0.0.31.jar直接拷貝到MyEclipse安裝目錄下的dropins資料夾中,然後重啟Eclipse即可。 重啟完成後,右擊java專案會

如何JAVA程式製作成可以直接執行的exe檔案

突然心血來潮,想自己做個小程式玩玩,但是怎麼把他做成一個exe檔案,讓大家能夠更好的理解和使用呢,百度了一下,說是需要exe4j來生成,但是看了很多關於exe4j將java程式生成exe檔案的教程,覺著都不是自己想要的結果,還是自己綜合一下,寫篇文章記錄一下. 下載和安裝的步驟我就略過了,直接說

java程式在Linux後臺執行

遇到需要在Linux上面跑一個server,但是用ssh上去執行server.java程式再退出ssh,那個程式就會關閉,所以想到要讓它像一個服務一樣一直跑在Linux上面,所以找到了這個命令:nohup java Server &結尾的 & 符號代表這個程式不會受到ctrl+c的影響,依

用記事本編寫第一個Java程式執行時 出現報錯:錯誤: 類helloworld是公共的, 應在名 helloworld.java 的檔案中宣告 public class helloworld {

在書本上盲人摸象的摸索學習Java,Java環境配置完成,安裝好eclipse後,便興沖沖的去在記事本上編寫第一個Java程式,結果給破了一盆冷水,略懵        public class helloworld {public static void main(St

深入理解Java程式執行順序

下面將從一道阿里巴巴試題詳細分析Java程式執行順序。 阿里巴巴試題 public class Test { public static int k = 0; public static Test t1 = new Test("t1"); public static Test t

java程式打包成安裝版exe

將java程式打包成安裝版exe 注意是將其打包成安裝版的exe而不是可執行的exe 首先需要寫好java程式,然後打包成可執行jar,接下來使用exe4j將其打包成可執行exe,詳見: https://blog.csdn.net/rico_zhou/article/details/

java程式執行順序理解

  public class StaticTest { public static int k = 0; public static StaticTest t1 = new StaticTest("t1"); public static StaticTest t2 =

什麼時候應該應用程式切分多個容器?

圍繞著應該將應用程式的哪些部分切分為多個容器以及為什麼要這樣做,存在著很多困惑。我最近對Docker使用者郵箱列表的迴應促成了今天的文章。在這篇文章中我打算評估一個映象化的Java應用程式,它歷史上曾經執行在一個單一的Tomcat伺服器裡,並解釋為什麼我會把它切分為獨立的容器。為了讓事情有趣

[Python程式設計]綜合性實驗: Java原始碼高亮 實現Java程式碼轉換html

前言 這個是大三下學期的Java課程設計,目前重構完成了程式碼轉換並輸出的部分.暫時還沒有打算完成視覺化介面. 程式碼不長,加起來也就100行左右(再次感受到Python的精簡),實現了對註釋,關鍵字,字串,一些運算子的高亮. 程式碼實現 import re cl

臥底阿里、京東、美團,Java程式設計師大家帶回來的面試題

面試,難還是不難?最終結果好還是不好?取決於面試者的底蘊(氣場+技能)、心態和認知以及溝通技巧。而一些主流的大型網際網路公司面試(阿里巴巴、京東、美團、滴滴)更是需要你在面試時展現出自己的能力,從而獲得面試官的欣賞和肯定。   而程式設計師在應聘時更是需要經歷層層面試。俗話說,磨刀

java程式執行過程

  Java User java是JVM,執行java後就準備好了程式碼區,靜態區,棧區,堆區。 執行User時現在程式碼區找看有沒有User.class,如果沒有就在環境裡找classpath環境變數,classpath裡面有很多路徑,逐一在每個路徑下找該User.cl

如何jar程式設定開機自啟動

1.將jar程式的啟動檔案放到 C:\Users\yang'f\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup,其中yang'f為使用者名稱,根據自己的電腦使用者名稱進行修改 2.jar檔案的形成為克萊特詢價.bat 3.注意jar程

java程式CRT登入時啟動未設定編碼,造成啟動亂碼

1、以下提供CRT連線程式設定編碼指令碼,字尾為“.vbs” # $language = "VBScript"# $interface = "1.0" Sub Main crt.Screen.Synchronous = True crt.Screen.WaitForString "$ " crt.Scr

java程式碼的MapReduce打包成jar 報錯: JAVA程式執行時出現:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsEx

以前的學習筆記,整理一下: java程式碼的MapReduce打包成jar 報錯: JAVA程式執行時出現:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at PrintWhat.main(Pri