SpringBoot?項(xiàng)目部署與監(jiān)控的過(guò)程
SpringBoot項(xiàng)目部署
在如今的互聯(lián)網(wǎng)背景下前后端分離開(kāi)發(fā)已經(jīng)成為互聯(lián)網(wǎng)的主流趨勢(shì),SpringBoot構(gòu)建web項(xiàng)目已經(jīng)非??焖倭?,只需要將其打成一個(gè)jar包,然后通過(guò)java -jar jar包的名稱就可以啟動(dòng)。
jar包

首先我們需要導(dǎo)入springBoot的maven依賴
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
package完成后,會(huì)出現(xiàn)一個(gè)jar包

我們可以將jar包上傳到Linux服務(wù)器上面,以jar運(yùn)行(此處本地驗(yàn)證打包成功)
java -jar zdy-spring-boot-start-1.0-SNAPSHOT.jar
war包
首先我們需要修改pom.xml配置文件
<packaging>jar</packaging> //修改為 <packaging>war</packaging>
然后在pom.xml文件中添加依賴
<!--添加servlet-api的依賴,用來(lái)打war包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>還需要排除springboot內(nèi)置的tomcat干擾
<!--最終打成war包,排除內(nèi)置的tomcat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>然后我們需要改造啟動(dòng)類
如果是war包發(fā)布,需要增加SpringBootServletInitializer子類,并重寫其configure方法,或者將main函數(shù)所在的類繼承SpringBootSerletInitializer,并重寫configure方法。
當(dāng)時(shí)打包為war時(shí)上傳tomact服務(wù)器訪問(wèn)項(xiàng)目始終報(bào)錯(cuò)404就是忽略了這個(gè)。
@SpringBootApplication
public class MainApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MainApplication.class);
}
}
war包和jar方式對(duì)比
SpringBoot 項(xiàng)目 jar 與 war 打包方式對(duì)比
啟動(dòng)與部署方式
jar 包:操作簡(jiǎn)單,通過(guò)java -jar xx.jar直接啟動(dòng),使用最廣泛;
war 包:需部署到 Tomcat 的 webapps 目錄,隨 Tomcat 啟動(dòng)而啟動(dòng)。
資源打包差異
jar 包:不會(huì)包含src/main/webapp下的內(nèi)容(若路徑錯(cuò)誤會(huì)出現(xiàn) 404);
war 包:會(huì)將src/main/webapp下的內(nèi)容打包進(jìn)去。
適用場(chǎng)景
選 jar 包:提供 rest 服務(wù)的項(xiàng)目,命令行運(yùn)行便捷;
選 war 包:含大量 css、js、html 且需頻繁改動(dòng)的項(xiàng)目(可直接替換靜態(tài)資源,無(wú)需重新打包上傳,效率更高)。
多環(huán)境部署
- 在項(xiàng)目運(yùn)行中,包括多環(huán)境,如線上環(huán)境prod,開(kāi)發(fā)環(huán)境dev,測(cè)試緩存test;
- 在不同的環(huán)境需要不同的配置,從而在不同的場(chǎng)景下去跑我們的程序;
- 例如prod和dev環(huán)境下需要連接不同的數(shù)據(jù)庫(kù),配置不同的日志輸出;
- SpringBoot對(duì)此提供了支持,一方面是@Profile注解,另一方面還有多資源配置文件。
@Profile
@Profile注解的作用是指定類和方法在特定的Profile環(huán)境生效,任何@Compoent或@Configuration注解的類都可以使用@Profile注解;- 在使用DI來(lái)依賴注入的時(shí)候,能夠根據(jù)@Profile標(biāo)明的環(huán)境,將注入符合當(dāng)前環(huán)境的相應(yīng)的bean。
使用要求:
@Component或者@Configuration注解的類可以使用@profile;@Profile中需要指定一個(gè)字符串,約定生效的環(huán)境。
@Profile的使用位置:
- 修飾類
- 修飾方法
- 修飾注解
Profile激活
在實(shí)際使用中,注解中標(biāo)識(shí)了prod,test,qa等多個(gè)環(huán)境,運(yùn)行時(shí)使用哪個(gè)profile有spring.profiles.active控制,可以使用配置文件或命令行方式創(chuàng)建。
- 配置文件激活
spring:
profiles:
active: dev- 命令行方式激活
java -jar spring-boot-config-0.1-SNAPSHOT.jar --spring.profiles.active=dev
多Proflie的資源文件
一般為4個(gè)配置文件:
- application.properties 公共配置
- application-dev.properties 開(kāi)發(fā)環(huán)境配置
- application-test.properties 測(cè)試環(huán)境配置
- application-prod.properties 生產(chǎn)環(huán)境配置
不同的properties配置文件也可以是在application.properties文件中來(lái)激活profile:spring.profiles.active = test。
SpringBoot監(jiān)控
Auturator
- 其是spring boot的一個(gè)附加功能,可以幫助我們?cè)趹?yīng)用程序生成環(huán)境是監(jiān)控和管理應(yīng)用程序;
- 可以使用HTTP的各種請(qǐng)求來(lái)監(jiān)管,審計(jì),收集應(yīng)用的情況。
HTTP 方法 | 路徑 | 描述 |
GET | /auditevents | 顯示應(yīng)用暴露的審計(jì)事件(如認(rèn)證進(jìn)入、訂單失效) |
GET | /beans | 描述應(yīng)用程序上下文里全部的 Bean 及它們的關(guān)系 |
GET | /conditions | (對(duì)應(yīng) 1.0 的 /autoconfig)提供自動(dòng)配置生效的條件情況,記錄哪些條件通過(guò) / 沒(méi)通過(guò) |
GET | /configprops | 描述配置屬性(包含默認(rèn)值)如何注入 Bean |
GET | /env | 獲取全部環(huán)境屬性 |
GET | /env/{name} | 根據(jù)名稱獲取特定的環(huán)境屬性值 |
GET | /flyway | 提供 Flyway 數(shù)據(jù)庫(kù)遷移信息 |
GET | /liquibase | 顯示 Liquibase 數(shù)據(jù)庫(kù)遷移的詳細(xì)信息 |
GET | /health | 報(bào)告應(yīng)用程序的健康指標(biāo)(由 HealthIndicator 實(shí)現(xiàn)類提供) |
GET | /heapdump | dump 一份應(yīng)用的 JVM 堆信息 |
GET | /httptrace | 顯示 HTTP 蹤跡,最近 100 個(gè) HTTP request/response |
GET | /info | 獲取應(yīng)用程序的定制信息(由 info 打頭的屬性提供) |
GET | /logfile | 返回 log 文件內(nèi)容(需配置 logging.file 或 logging.path) |
GET | /loggers | 顯示和修改配置的 loggers |
GET | /metrics | 報(bào)告各種應(yīng)用程序度量信息(如內(nèi)存用量、HTTP 請(qǐng)求計(jì)數(shù)) |
GET | /metrics/{name} | 報(bào)告指定名稱的應(yīng)用程序度量值 |
GET | /scheduledtasks | 展示應(yīng)用中的定時(shí)任務(wù)信息 |
GET | /sessions | 若使用 Spring Session,展示應(yīng)用中的 HTTP sessions 信息 |
POST | /shutdown | 關(guān)閉應(yīng)用程序(需配置 endpoints.shutdown.enabled=true) |
GET | /mappings | 描述全部的 URI 路徑,及它們和控制器(包含 Actuator 端點(diǎn))的映射關(guān)系 |
GET | /threaddump | 獲取線程活動(dòng)的快照 |
體驗(yàn)Actuator
使用Actuator功能與springBoot使用其他功能一樣簡(jiǎn)單,只需要加入xml依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
為了保證監(jiān)控接口的安全性,需要添加spring-boot-start-secuity依賴,訪問(wèn)應(yīng)用監(jiān)控端點(diǎn)是,都需要輸入驗(yàn)證信息。也可以選擇不加,不進(jìn)行安全管理。
編寫配置文件
配置詳情
Actuator 基礎(chǔ)配置(Spring Boot 2.x)
- 默認(rèn)開(kāi)放端點(diǎn):僅
/actuator/health、/actuator/info(為安全考慮)。 - 端點(diǎn)暴露配置:
- 開(kāi)放所有端點(diǎn):
management.endpoints.web.exposure.include=*
- 開(kāi)放部分端點(diǎn):
management.endpoints.web.exposure.include=beans,trace
- 自定義監(jiān)控路徑:
management.endpoints.web.base-path=/manage
配置后訪問(wèn)地址變?yōu)?/manage/*。
常用端點(diǎn)功能說(shuō)明
1. health
- 作用:檢查應(yīng)用運(yùn)行狀態(tài)(高頻監(jiān)控點(diǎn)),可返回?cái)?shù)據(jù)庫(kù)連接、磁盤空間等異常原因。
- 默認(rèn)開(kāi)放,訪問(wèn):
http://localhost:8000/actuator/health,返回示例:
{
"status": "UP",
"components": {
"db": {
"status": "UP",
"details": {
"database": "MySQL",
"result": 1,
"validationQuery": "/* ping */ SELECT 1"
}
},
"diskSpace": {
"status": "UP",
"details": {
"total": 429496729600,
"free": 295998197760,
"threshold": 10485760
}
},
"ping": {
"status": "UP"
},
"redis": {
"status": "UP",
"details": {
"version": "7.0.15"
}
}
}
}- 內(nèi)置健康指標(biāo):
DataSourceHealthIndicator(數(shù)據(jù)庫(kù))、DiskSpaceHealthIndicator(磁盤)等;可關(guān)閉指定指標(biāo):
management.health.redis.enabled=false
2. info
- 作用:返回自定義配置的信息(以
info開(kāi)頭的配置)。 - 配置示例:
info.app.name=spring-boot-actuator info.app.version=1.0.0
- 訪問(wèn):
http://localhost:8000/actuator/info,返回示例:
{
"app": {
"name": "SpringCacheDemo",
"version": 1,
"test": "test"
}
}3. beans
- 作用:展示應(yīng)用中所有 Bean 的信息(別名、類型、作用域、依賴等)。
- 訪問(wèn):
http://localhost:8000/actuator/beans,返回示例包含 Bean 名稱、類型(如TomcatEmbeddedServletContainerFactory)等。
4. conditions
- 作用:查看自動(dòng)配置的生效 / 未生效條件(排查配置問(wèn)題)。
- 訪問(wèn):
http://localhost:8000/actuator/conditions,返回positiveMatches(生效配置)、negativeMatches(未生效配置)及原因。
5. heapdump
- 作用:生成 GZip 壓縮的 JVM 堆轉(zhuǎn)儲(chǔ)文件。
- 訪問(wèn):
http://localhost:8000/actuator/heapdump,可通過(guò) JDK 工具(如 VisualVM)分析內(nèi)存泄漏。
6. mappings
- 作用:描述所有 URI 路徑與控制器的映射關(guān)系。
- 訪問(wèn):
http://localhost:8000/actuator/mappings,返回示例包含接口路徑(如/hello)對(duì)應(yīng)的控制器方法。
7. threaddump
- 作用:生成線程活動(dòng)快照,用于排查線程問(wèn)題(線程名、狀態(tài)、堆棧等)。
- 訪問(wèn):
http://localhost:8000/actuator/threaddump,返回線程的狀態(tài)(如WAITING)、堆棧信息等。
8. shutdown
- 作用:關(guān)閉應(yīng)用(需手動(dòng)開(kāi)啟)。
- 開(kāi)啟配置:
management.endpoint.shutdown.enabled=true
- 訪問(wèn)(僅支持 POST):
curl -X POST "http://localhost:8000/actuator/shutdown"
- 返回示例:
{"message": "Shutting down, bye..."}Spring Boot Admin
- Spring Boot Admin 是一個(gè)針對(duì)spring-boot的actuator接口進(jìn)行UI美化封裝的監(jiān)控工具;
- 他可以 返回在列表中瀏覽所有被監(jiān)控spring-boot項(xiàng)目的基本信息比如:Spring容器管理的所有的bean、 詳細(xì)的Health信息、內(nèi)存信息、JVM信息、垃圾回收信息、各種配置信息(比如數(shù)據(jù)源、緩存列表 和命中率)等,Threads 線程管理,Environment 管理等。

服務(wù)端
配置xml文件
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.7.10</version>
</dependency>需要在啟動(dòng)類上添加注解
@EnableAdminServer

客戶端
添加maven依賴
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.0</version>
</dependency>配置yml文件
server:
port: 8080
# 自定義配置信息用于“/actuator/info”讀取
info:
name: 老王
age: 100
phone: 110
# 通過(guò)下面的配置啟用所有的監(jiān)控端點(diǎn),默認(rèn)情況下,這些端點(diǎn)是禁用的:
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
# 將Client作為服務(wù)注冊(cè)到Server,通過(guò)Server來(lái)監(jiān)聽(tīng)項(xiàng)目的運(yùn)行情況
spring:
boot:
admin:
client:
url: http://localhost:8081
# #application實(shí)例名
# application:
# name: spring-boot-admin-client到此這篇關(guān)于java線程池的文章就介紹到這了,更多相關(guān)java線程池內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springsecurity6配置自定義路徑身份認(rèn)證的實(shí)現(xiàn)
本文主要介紹了springsecurity6配置自定義路徑身份認(rèn)證的實(shí)現(xiàn),通過(guò)使用自定義的AuthorizationManager和MyService,可以實(shí)現(xiàn)更靈活的訪問(wèn)控制,感興趣的可以了解一下2025-03-03
SpringSecurity 自定義認(rèn)證登錄的項(xiàng)目實(shí)踐
本文主要介紹了SpringSecurity 自定義認(rèn)證登錄的項(xiàng)目實(shí)踐,以手機(jī)驗(yàn)證碼登錄為例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
java線程并發(fā)countdownlatch類使用示例
javar的CountDownLatch是個(gè)計(jì)數(shù)器,它有一個(gè)初始數(shù),等待這個(gè)計(jì)數(shù)器的線程必須等到計(jì)數(shù)器倒數(shù)到零時(shí)才可繼續(xù)。2014-01-01
Java Web 實(shí)現(xiàn)QQ登錄功能一個(gè)帳號(hào)同一時(shí)間只能一個(gè)人登錄
對(duì)于一個(gè)帳號(hào)在同一時(shí)間只能一個(gè)人登錄,下文給大家介紹的非常詳細(xì),對(duì)java web qq 登錄功能感興趣的朋友一起看看吧2016-11-11
Spring Data JPA 簡(jiǎn)單查詢--方法定義規(guī)則(詳解)
下面小編就為大家?guī)?lái)一篇Spring Data JPA 簡(jiǎn)單查詢--方法定義規(guī)則(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
idea如何為java程序添加啟動(dòng)參數(shù)
文章介紹了如何在Java程序中添加啟動(dòng)參數(shù),包括program arguments、VM arguments和Environment variables,并解釋了如何在代碼中使用System類獲取這些參數(shù)2025-01-01
Java Spring分別實(shí)現(xiàn)定時(shí)任務(wù)方法
這篇文章主要為大家詳細(xì)介紹了Java與Spring設(shè)置動(dòng)態(tài)定時(shí)任務(wù)的方法,定時(shí)任務(wù)的應(yīng)用場(chǎng)景十分廣泛,如定時(shí)清理文件、定時(shí)生成報(bào)表、定時(shí)數(shù)據(jù)同步備份等2022-07-07

