在 Java 開發(fā)與運(yùn)維中,“啟動(dòng) Java 服務(wù)” 是核心操作。無論是簡(jiǎn)單的 Java 小程序,還是 Spring Boot、Dubbo 等框架構(gòu)建的企業(yè)級(jí)服務(wù),都需通過特定命令啟動(dòng)。很多開發(fā)者常困惑于 “不同場(chǎng)景用什么命令”“后臺(tái)啟動(dòng)怎么配置”“啟動(dòng)后如何管理進(jìn)程”,小編將分場(chǎng)景拆解 Java 服務(wù)的啟動(dòng)方法,覆蓋 Windows、Linux 兩大系統(tǒng),詳解命令語法與實(shí)操技巧,助你高效啟動(dòng)并管理 Java 服務(wù)。
一、Java 服務(wù)啟動(dòng)前的核心前提
啟動(dòng) Java 服務(wù)前需完成兩項(xiàng)準(zhǔn)備工作,避免因環(huán)境問題導(dǎo)致啟動(dòng)失?。?/p>
1. 確認(rèn) JDK 已正確安裝配置
Java 服務(wù)依賴 JDK(Java Development Kit)的運(yùn)行環(huán)境,需先驗(yàn)證 JDK 是否就緒:
驗(yàn)證命令:在終端(Linux)或命令提示符(Windows)輸入java -version,若顯示 JDK 版本信息(如java version "1.8.0_381"),說明環(huán)境正常;
若報(bào)錯(cuò) “java 不是內(nèi)部或外部命令”:需配置JAVA_HOME環(huán)境變量(Windows 在 “系統(tǒng)屬性→高級(jí)→環(huán)境變量” 中設(shè)置,Linux 在/etc/profile或~/.bashrc中添加export JAVA_HOME=/usr/local/jdk1.8.0_381),并將%JAVA_HOME%\bin(Windows)或$JAVA_HOME/bin(Linux)加入PATH。
2. 準(zhǔn)備 Java 服務(wù)的啟動(dòng)文件
不同類型的 Java 服務(wù),啟動(dòng)依賴的文件不同:
簡(jiǎn)單 Java 程序:需編譯后的.class文件(如HelloWorld.class),或打包后的.jar文件(通過javac編譯、jar命令打包生成);
框架服務(wù)(Spring Boot/Dubbo):通常是打包后的可執(zhí)行.jar文件(如spring-boot-demo-1.0.0.jar),由 Maven/Gradle 構(gòu)建生成,內(nèi)置 Tomcat 等容器,可直接啟動(dòng);
傳統(tǒng) Web 服務(wù)(WAR 包):需部署到 Tomcat、Jetty 等容器,通過啟動(dòng)容器間接啟動(dòng) Java 服務(wù)(后文單獨(dú)說明)。
二、Java 服務(wù)啟動(dòng)方法:分場(chǎng)景詳解(Windows/Linux 通用)
根據(jù) Java 服務(wù)的類型(簡(jiǎn)單程序 / 框架服務(wù))與啟動(dòng)需求(前臺(tái) / 后臺(tái)),需選擇不同的命令,核心場(chǎng)景分為三類:
(一)場(chǎng)景 1:?jiǎn)?dòng)簡(jiǎn)單 Java 程序(.class/.jar 文件)
適用于開發(fā)測(cè)試階段的小型 Java 程序,如工具類、控制臺(tái)應(yīng)用,啟動(dòng)命令簡(jiǎn)潔直觀:
1. 啟動(dòng).class 文件(未打包的單個(gè)類)
若服務(wù)僅一個(gè)編譯后的.class文件(如HelloWorld.class,含main方法),直接用java命令啟動(dòng):
命令語法:java 類名(無需加.class后綴);
實(shí)操示例:
假設(shè)HelloWorld.class在D:\java-project目錄(Windows)或/home/java-project目錄(Linux):
Windows:先cd D:\java-project,再輸入java HelloWorld,程序會(huì)在前臺(tái)運(yùn)行,輸出控制臺(tái)日志;
Linux:先cd /home/java-project,再輸入java HelloWorld,效果與 Windows 一致。
注意:若類屬于包(如com.example.HelloWorld),需進(jìn)入包的上層目錄,命令改為java com.example.HelloWorld(如類文件在com/example/HelloWorld.class,需在com的上層目錄執(zhí)行命令)。
2. 啟動(dòng)可執(zhí)行.jar 文件(打包后的程序)
若程序已打包為可執(zhí)行.jar文件(需在MANIFEST.MF中指定Main-Class),用java -jar命令啟動(dòng):
命令語法:java -jar jar文件名;
實(shí)操示例:
啟動(dòng)demo.jar文件:
Windows:cd D:\java-project → java -jar demo.jar;
Linux:cd /home/java-project → java -jar demo.jar;
特點(diǎn):前臺(tái)啟動(dòng),終端關(guān)閉則服務(wù)停止,適合開發(fā)測(cè)試;若需傳遞參數(shù)(如配置文件路徑),可在命令后添加,如java -jar demo.jar --spring.profiles.active=prod(Spring Boot 程序指定生產(chǎn)環(huán)境配置)。
(二)場(chǎng)景 2:?jiǎn)?dòng) Spring Boot/Dubbo 等框架服務(wù)(企業(yè)級(jí)常用)
企業(yè)級(jí) Java 服務(wù)多基于 Spring Boot、Dubbo 等框架開發(fā),打包為可執(zhí)行.jar文件,需區(qū)分 “前臺(tái)啟動(dòng)”(便于調(diào)試)與 “后臺(tái)啟動(dòng)”(生產(chǎn)環(huán)境常用):
1. 前臺(tái)啟動(dòng)(開發(fā)調(diào)試用)
與簡(jiǎn)單.jar 文件啟動(dòng)命令一致,適合開發(fā)階段查看實(shí)時(shí)日志:
命令:java -jar spring-boot-demo.jar;
優(yōu)勢(shì):?jiǎn)?dòng)后直接在終端輸出日志,按Ctrl+C可快速停止服務(wù),方便調(diào)試時(shí)查看報(bào)錯(cuò)信息;
注意:Spring Boot 服務(wù)默認(rèn)端口為 8080,若端口被占用,可通過命令指定端口:java -jar spring-boot-demo.jar --server.port=8081。
2. 后臺(tái)啟動(dòng)(生產(chǎn)環(huán)境用)
生產(chǎn)環(huán)境需服務(wù)在后臺(tái)持續(xù)運(yùn)行,即使終端關(guān)閉也不停止,Windows 與 Linux 的實(shí)現(xiàn)方式不同:
(1)Linux 系統(tǒng):用nohup或screen實(shí)現(xiàn)后臺(tái)啟動(dòng)
方法 1:nohup命令(最常用)
語法:nohup java -jar jar文件名 > 日志文件名 2>&1 &
示例:?jiǎn)?dòng)spring-boot-demo.jar并將日志輸出到service.log:
nohup java -jar spring-boot-demo.jar > service.log 2>&1 &
命令解析:nohup(忽略終端關(guān)閉信號(hào))、> service.log(將標(biāo)準(zhǔn)輸出重定向到日志文件)、2>&1(將錯(cuò)誤輸出合并到標(biāo)準(zhǔn)輸出)、最后一個(gè)&(后臺(tái)運(yùn)行);
查看日志:tail -f service.log(實(shí)時(shí)查看日志)、cat service.log(查看全部日志);
停止服務(wù):先通過ps -ef | grep java找到進(jìn)程 ID(PID),再用kill -9 PID終止(如ps -ef | grep spring-boot-demo.jar找到 PID 為 1234,執(zhí)行kill -9 1234)。
方法 2:screen命令(需安裝,適合需后續(xù)交互的場(chǎng)景)
若需后續(xù)進(jìn)入服務(wù)的終端界面(如查看實(shí)時(shí)日志),可通過screen創(chuàng)建會(huì)話:
安裝 screen(CentOS:yum install screen,Ubuntu:apt install screen);
創(chuàng)建會(huì)話:screen -S java-service(java-service為會(huì)話名);
在會(huì)話中啟動(dòng)服務(wù):java -jar spring-boot-demo.jar;
脫離會(huì)話:按Ctrl+A+D(服務(wù)仍在后臺(tái)運(yùn)行);
重新進(jìn)入會(huì)話:screen -r java-service;
終止服務(wù):在會(huì)話中按Ctrl+C,或退出會(huì)話后用kill命令終止進(jìn)程。
(2)Windows 系統(tǒng):用 “任務(wù)計(jì)劃程序” 或start /b后臺(tái)啟動(dòng)
方法 1:start /b命令(臨時(shí)后臺(tái)啟動(dòng))
語法:start /b java -jar jar文件名 > 日志文件名 2>&1
示例:start /b java -jar spring-boot-demo.jar > service.log 2>&1
特點(diǎn):服務(wù)在后臺(tái)運(yùn)行,命令提示符可關(guān)閉,但需通過任務(wù)管理器終止進(jìn)程(找到j(luò)ava.exe進(jìn)程,右鍵 “結(jié)束任務(wù)”);
缺點(diǎn):重啟電腦后服務(wù)不自動(dòng)啟動(dòng),適合臨時(shí)需求。
方法 2:注冊(cè)為 Windows 服務(wù)(開機(jī)自啟,生產(chǎn)推薦)
若需服務(wù)開機(jī)自動(dòng)啟動(dòng),可將 Java 服務(wù)注冊(cè)為 Windows 系統(tǒng)服務(wù),需借助工具(如winsw):
下載winsw(官網(wǎng):https://github.com/winsw/winsw),重命名為java-service.exe;
創(chuàng)建配置文件java-service.xml(與java-service.exe同目錄),內(nèi)容示例:
TypeScript取消自動(dòng)換行復(fù)制
<service>
<id>JavaService</id>
<name>Java Service(Spring Boot Demo)</name>
<description>Java服務(wù)(Spring Boot Demo)</description>
<executable>java</executable>
<arguments>-jar "D:\java-project\spring-boot-demo.jar"</arguments>
<logpath>D:\java-project\logs</logpath>
<logmode>rotate</logmode>
</service>
安裝服務(wù):在命令提示符(管理員權(quán)限)中執(zhí)行java-service.exe install;
啟動(dòng)服務(wù):net start JavaService(或在 “服務(wù)” 窗口手動(dòng)啟動(dòng));
停止 / 卸載服務(wù):net stop JavaService、java-service.exe uninstall。
(三)場(chǎng)景 3:?jiǎn)?dòng)傳統(tǒng) Web 服務(wù)(WAR 包部署到容器)
若 Java 服務(wù)是 WAR 包(如基于 SSH、SSM 框架的 Web 項(xiàng)目),需部署到 Tomcat、Jetty 等容器,通過啟動(dòng)容器間接啟動(dòng)服務(wù):
1. Tomcat 容器啟動(dòng)示例(Windows/Linux 通用)
步驟 1:部署 WAR 包
將demo.war文件復(fù)制到 Tomcat 的webapps目錄(如 Linux 的/usr/local/tomcat/webapps,Windows 的D:\tomcat\webapps);
步驟 2:?jiǎn)?dòng) Tomcat
Linux:進(jìn)入 Tomcat 的bin目錄,執(zhí)行./startup.sh(前臺(tái)啟動(dòng))或nohup ./startup.sh > catalina.out 2>&1 &(后臺(tái)啟動(dòng));
Windows:進(jìn)入bin目錄,雙擊startup.bat(前臺(tái)啟動(dòng),會(huì)彈出終端窗口),或執(zhí)行start /b startup.bat(后臺(tái)啟動(dòng));
訪問服務(wù):?jiǎn)?dòng)后通過http://服務(wù)器IP:8080/demo訪問(demo為 WAR 包名,8080 為 Tomcat 默認(rèn)端口);
停止容器:Linux 執(zhí)行./shutdown.sh,Windows 雙擊shutdown.bat。
三、Java 服務(wù)啟動(dòng)常見問題排查
“端口被占用” 報(bào)錯(cuò)
用端口查看命令找到占用進(jìn)程并終止:
Linux:ss -tuln | grep 8080(查看 8080 端口占用),kill -9 PID終止進(jìn)程;
Windows:netstat -ano | findstr "8080",在任務(wù)管理器中結(jié)束對(duì)應(yīng) PID 的進(jìn)程。
“找不到主類” 報(bào)錯(cuò)
檢查.jar 文件的MANIFEST.MF是否配置Main-Class(可通過jar -tf demo.jar | grep MANIFEST.MF查看路徑,用cat或記事本打開文件驗(yàn)證);若為 Spring Boot 項(xiàng)目,確保pom.xml中配置了spring-boot-maven-plugin插件(負(fù)責(zé)打包可執(zhí)行.jar)。
啟動(dòng)后日志無輸出或服務(wù)無響應(yīng)
查看日志文件(如service.log)定位錯(cuò)誤,常見原因:配置文件路徑錯(cuò)誤(需通過--spring.config.location指定)、數(shù)據(jù)庫連接失敗(檢查數(shù)據(jù)庫地址與賬號(hào)密碼)、依賴缺失(確保.jar 包打包完整,無遺漏依賴)。
Java 服務(wù)啟動(dòng)需根據(jù) “程序類型”(.class/.jar/WAR)與 “運(yùn)行環(huán)境”(Windows/Linux)選擇命令:簡(jiǎn)單程序用java或java -jar前臺(tái)啟動(dòng),開發(fā)調(diào)試便捷;企業(yè)級(jí)框架服務(wù)(Spring Boot)在 Linux 用nohup后臺(tái)啟動(dòng)并記錄日志,在 Windows 推薦注冊(cè)為系統(tǒng)服務(wù)實(shí)現(xiàn)開機(jī)自啟;傳統(tǒng) Web 服務(wù)需部署到 Tomcat 等容器啟動(dòng)。掌握這些方法,結(jié)合日志排查問題,就能高效啟動(dòng)并管理 Java 服務(wù),保障服務(wù)穩(wěn)定運(yùn)行。