SpringCloud Admin實戰(zhàn)之健康檢查與全鏈路告警深度解讀
一、引言
在 微服務(wù)架構(gòu)中,服務(wù)健康監(jiān)控與 故障告警是保障系統(tǒng)穩(wěn)定運行的關(guān)鍵。
Spring Cloud Admin作為 Spring Cloud 生態(tài)中的核心監(jiān)控工具,提供 開箱即用的 健康檢查與 告警功能,幫助開發(fā)者更方便地監(jiān)控和管理服務(wù)。
實時告警 - 集成郵件、Slack等告警渠道,構(gòu)建高效告警體系。
集中化管理 - 深入解析 Spring Cloud Admin的 核心優(yōu)勢和應(yīng)用場景。
二、Spring Cloud 鏈路監(jiān)控(Admin)核心組件
2.1 Spring Boot Actuator:健康檢查與性能監(jiān)控
Spring Boot Actuator 是 Spring Cloud Admin的核心依賴,提供了豐富的監(jiān)控端點,幫助開發(fā)者實時監(jiān)控服務(wù)的健康狀態(tài)和性能指標(biāo)。
1. 原理
- 健康檢查:
通過 /actuator/health端點,Actuator 可實時監(jiān)控服務(wù)的健康狀態(tài),包括數(shù)據(jù)庫連接、磁盤空間、外部服務(wù)依賴等。
- 性能監(jiān)控:
通過 /actuator/metrics端點,Actuator 提供CPU、內(nèi)存、線程、HTTP 請求等性能指標(biāo)。
- 自定義健康檢查:
開發(fā)者可通過實現(xiàn) HealthIndicator接口,自定義健康檢查邏輯。
2. 示例
默認健康檢查
訪問 /actuator/health,返回示例:
{ "status": "UP", "components": { "db": { "status": "UP" }, "diskSpace": { "status": "UP" } } }
自定義健康檢查
實現(xiàn) HealthIndicator接口,檢查數(shù)據(jù)庫連接狀態(tài):
@Component public class DatabaseHealthIndicator implements HealthIndicator { @Override public Health health() { if (checkDatabaseConnection()) { return Health.up().build(); } else { return Health.down().withDetail("Error", "Database connection failed").build(); } } }
訪問 /actuator/health,返回示例:
{ "status": "DOWN", "components": { "db": { "status": "DOWN", "details": { "Error": "Database connection failed" } }, "diskSpace": { "status": "UP" } } }
2.2 Admin Server:集中化監(jiān)控與管理
Admin Server 是 Spring Cloud Admin的核心組件,負責(zé)集中化管理所有注冊服務(wù)的監(jiān)控數(shù)據(jù)。
1. 原理
- 服務(wù)發(fā)現(xiàn):Admin Server 可自動發(fā)現(xiàn)注冊到 Eureka或 Consul的服務(wù),并展示其健康狀態(tài)和性能指標(biāo)。
- 統(tǒng)一監(jiān)控面板:提供可視化界面,實時查看所有服務(wù)的運行狀態(tài)。
- 日志管理:支持動態(tài)調(diào)整日志級別,便于問題排查。
2. 示例
示例 1:直接通過 spring.boot.admin.client.url 注冊到 Admin Server。
項目結(jié)構(gòu)
spring-cloud-admin-example1/ ├── admin-server/ # 管理服務(wù)模塊 │ ├── src/main/java/com/example/AdminServerApplication.java │ ├── src/main/resources/application.yml │ ├── pom.xml ├── user-service/ # 用戶服務(wù)模塊 │ ├── src/main/java/com/example/UserServiceApplication.java │ ├── src/main/resources/application.yml │ ├── pom.xml ├── order-service/ # 訂單服務(wù)模塊 │ ├── src/main/java/com/example/OrderServiceApplication.java │ ├── src/main/resources/application.yml │ ├── pom.xml
步驟 1:啟動 Admin Server
在AdminServerApplication.java 中 ,添加 @EnableAdminServer 注解。
@SpringBootApplication @EnableAdminServer public class AdminServerApplication { public static void main(String[] args) { SpringApplication.run(AdminServerApplication.class, args); } }
配置 Admin Server(application.yml)
server: port: 8080 # Admin Server 端口
啟動 Admin Server
運行 AdminServerApplication,訪問 http://localhost:8080,查看 Admin Server 控制面板。
步驟 2:客戶端服務(wù)注冊到 Admin Server
user-service和 order-service是兩個獨立的 Spring Boot 項目。
添加 Spring Cloud Admin 客戶端依賴 (pom.yml)
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> </dependency>
在application.yml 中配置客戶端
spring: boot: admin: client: url: http://localhost:8080 # Admin Server 的地址 server: port: 8081 # user-service 端口
啟動客戶端服務(wù)
分別運行 UserServiceApplication和 OrderServiceApplication。
訪問 http://localhost:8080,查看 user-service和 order-service是否成功注冊。
示例 2:通過 Eureka 作為服務(wù)注冊與發(fā)現(xiàn)中心
項目結(jié)構(gòu)
spring-cloud-admin-example2/ ├── eureka-server/ # Eureka 服務(wù)注冊中心模塊 │ ├── src/main/java/com/example/EurekaServerApplication.java │ ├── src/main/resources/application.yml │ ├── pom.xml ├── admin-server/ # 管理服務(wù)模塊 │ ├── src/main/java/com/example/AdminServerApplication.java │ ├── src/main/resources/application.yml │ ├── pom.xml ├── user-service/ # 用戶服務(wù)模塊 │ ├── src/main/java/com/example/UserServiceApplication.java │ ├── src/main/resources/application.yml │ ├── pom.xml ├── order-service/ # 訂單服務(wù)模塊 │ ├── src/main/java/com/example/OrderServiceApplication.java │ ├── src/main/resources/application.yml │ ├── pom.xml
步驟 1:啟動 Eureka Server
在 EurekaServerApplication.java 中添加 @EnableEurekaServer 注解。
@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
在 application.yml 中配置 Eureka Server
server: port: 8761 # Eureka Server 端口 eureka: instance: hostname: localhost client: register-with-eureka: false # Eureka Server 不注冊自己 fetch-registry: false
啟動 Eureka Server
運行 EurekaServerApplication,訪問 http://localhost:8761,查看 Eureka 控制面板。
步驟 2:啟動 Admin Server
在 AdminServerApplication.java 中添加 @EnableAdminServer 注解。
@SpringBootApplication @EnableAdminServer public class AdminServerApplication { public static void main(String[] args) { SpringApplication.run(AdminServerApplication.class, args); } }
在 application.yml 中配置 Admin Server,使其從 Eureka 發(fā)現(xiàn)服務(wù)
spring: application: name: admin-server # Admin Server 名稱 cloud: discovery: enabled: true # 啟用服務(wù)發(fā)現(xiàn) eureka: client: service-url: defaultZone: http://localhost:8761/eureka # Eureka Server 地址
啟動 Admin Server
運行 AdminServerApplication,訪問 http://localhost:8080,查看 Admin Server 控制面板。
步驟 3:客戶端服務(wù)注冊到 Eureka
user-service和 order-service是兩個獨立的 Spring Boot 項目。
在 pom.xml 中添加 Spring Cloud Admin 客戶端和 Eureka 客戶端依賴
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
在 application.yml 中配置客戶端
spring: application: name: user-service # 服務(wù)名稱 cloud: discovery: enabled: true # 啟用服務(wù)發(fā)現(xiàn) boot: admin: client: enabled: true # 啟用 Admin Client eureka: client: service-url: defaultZone: http://localhost:8761/eureka # Eureka Server 地址 server: port: 8081 # user-service 端口
啟動客戶端服務(wù)
- 分別運行 UserServiceApplication和 OrderServiceApplication。
- 訪問 http://localhost:8761,查看服務(wù)是否注冊到 Eureka。
- 訪問 http://localhost:8080,查看服務(wù)是否注冊到 Admin Server。
3.總結(jié)
- 直接注冊到 Admin Server:適合小型項目或測試環(huán)境。
- 通過 Eureka 注冊:適合生產(chǎn)環(huán)境,支持大規(guī)模微服務(wù)架構(gòu)。
2.3 告警通知模塊:實時告警與通知
Spring Cloud Admin 支持多種告警渠道,幫助開發(fā)者在服務(wù)異常時及時收到通知。
1. 原理
- 郵件告警:通過 SMTP 配置,將告警信息發(fā)送到指定郵箱。
- Slack 告警:通過 Webhook 集成 Slack,將告警信息推送到指定頻道。
- 多通道告警:支持同時配置多種告警渠道,實現(xiàn)分級告警。
2. 示例
示例1:郵件告警配置
在 Admin Server的 application.yml文件中
spring: mail: host: smtp.example.com # SMTP 服務(wù)器地址 port: 587 # SMTP 端口 username: user@example.com # 發(fā)件郵箱 password: yourpassword # 發(fā)件郵箱密碼 cloud: admin: notify: mail: enabled: true # 啟用郵件告警 to: admin@example.com # 收件郵箱
驗證郵件告警
- 1.啟動 admin-server。
- 2.模擬服務(wù)故障(如關(guān)閉 user-service)。
- 3.檢查收件郵箱,觀察是否收到告警郵件。
示例2:Slack 告警配置
在 Admin Server的 application.yml文件中
spring: cloud: admin: notify: slack: enabled: true # 啟用 Slack 告警 webhook-url: https://hooks.slack.com/services/your/webhook # Slack Webhook URL
驗證 Slack 告警
- 1.啟動 admin-server。
- 2.模擬服務(wù)故障(如關(guān)閉 order-service)。
- 3.檢查 Slack 頻道,觀察是否收到告警消息。
示例3:多通道告警配置
同時配置 郵件和 Slack告警,可以在 application.yml中同時添加郵件和 Slack 的配置:
spring: mail: host: smtp.example.com port: 587 username: user@example.com password: yourpassword cloud: admin: notify: mail: enabled: true to: admin@example.com slack: enabled: true webhook-url: https://hooks.slack.com/services/your/webhook
驗證告警
模擬服務(wù)故障
- 關(guān)閉 user-service或 order-service。
- 觀察 Admin Server控制面板中服務(wù)的健康狀態(tài)變化。
檢查告警通知
- 郵件告警:檢查收件郵箱,確認是否收到告警郵件。
- Slack 告警:檢查 Slack 頻道,確認是否收到告警消息。
3. 總結(jié)
- 郵件告警:在 application.yml中配置 SMTP 信息,啟用 郵件告警。
- Slack 告警:在 application.yml中配置 Slack Webhook URL,啟用 Slack 告警。
- 多通道告警:可以同時配置 郵件和 Slack 告警,實現(xiàn) 分級通知。
通過以上配置示例,讀者可以輕松實現(xiàn) Spring Cloud Admin的告警通知功能,確保在服務(wù)異常時及時收到通知。
2.4 日志與追蹤集成:問題排查與鏈路追蹤
Spring Cloud Admin 支持日志管理與鏈路追蹤,幫助開發(fā)者快速定位問題。
1. 原理
日志管理
Spring Cloud Admin 本身不直接管理日志,但可通過集成 Spring Boot Actuator提供的 /actuator/loggers端點,實現(xiàn) 動態(tài)調(diào)整微服務(wù)的日志級別,無需重啟服務(wù)。
鏈路追蹤
在 Spring Cloud 微服務(wù)架構(gòu)中,鏈路追蹤是常見需求,通常通過以下組件實現(xiàn):
主要組件
Spring Cloud Sleuth:
- 自動為每個請求添加唯一追蹤標(biāo)識(Trace ID、Span ID)。
- 記錄請求在微服務(wù)間的調(diào)用鏈路,便于故障排查。
Zipkin:
- 分布式追蹤系統(tǒng),用于 收集并可視化Sleuth生成的鏈路數(shù)據(jù)。
Spring Cloud Admin :
不直接參與鏈路追蹤數(shù)據(jù)的生成或存儲,但它能提供 以下能力:
- 集中化入口:支持快速跳轉(zhuǎn)至 Zipkin 控制臺,無需逐個訪問微服務(wù)的追蹤頁面。
- 問題定位:結(jié)合 健康狀態(tài)與日志信息,輔助故障分析,提高排查效率。
2. 示例
示例 1:動態(tài)調(diào)整日志級別
通過 Admin Server動態(tài)調(diào)整服務(wù)的日志級別,無需重啟服務(wù)即可生效。
步驟1:日志配置
# user-service/application.yml spring: application: name: user-service server: port: 8081 # 服務(wù)端口 # 初始日志級別配置 logging: level: com.example: INFO # 設(shè)置 com.example 包的日志級別為 INFO # 啟用日志管理端點 management: endpoint: loggers: enabled: true # 啟用日志管理端點
步驟2:動態(tài)調(diào)整日志級別
通過 Admin Server動態(tài)調(diào)整 user-service的日志級別。
獲取服務(wù)實例 ID:
- 1.訪問 Admin Server控制面板(http://localhost:8080)。
- 2.找到 user-service的實例 ID(例如:user-service-8081)。
使用 curl 命令動態(tài)調(diào)整日志級別:
將 com.example包的日志級別從 INFO調(diào)整為 DEBUG:
curl -X POST http://localhost:8080/instances/user-service-8081/actuator/loggers/com.example \ -H "Content-Type: application/json" \ -d '{"configuredLevel": "DEBUG"}'
參數(shù)說明
- {instanceId}:服務(wù)的實例 ID,可以在 Admin Server控制面板中查看。
- com.example:需要調(diào)整日志級別的包名。
步驟3:驗證日志級別調(diào)整
查看 user-service的日志輸出,確認日志級別已調(diào)整為 DEBUG。
例如, user-service中有以下日志代碼:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; @RestController public class UserController { private static final Logger logger = LoggerFactory.getLogger(UserController.class); @GetMapping("/users") public String getUsers() { logger.debug("Debug log message"); // 調(diào)試日志 logger.info("Info log message"); // 信息日志 return "User list"; } }
調(diào)整日志級別后,Debug log message將會輸出到日志中。
示例 2:鏈路追蹤集成
目標(biāo)
通過 Sleuth + Zipkin實現(xiàn) 全鏈路追蹤,并結(jié)合 Spring Cloud Admin快速定位問題。
步驟 1:添加 Sleuth 和 Zipkin 依賴
在 user-service和 order-service的 pom.xml文件中,添加如下依賴:
<!-- Sleuth 依賴 --> <dependency>gt; <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <!-- Zipkin 客戶端依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId> </dependency>
步驟 2:配置 Zipkin 服務(wù)地址
在 user-service和 order-service的 application.yml中,指定 Zipkin 服務(wù)器地址:
spring: zipkin: base-url: http://localhost:9411 # Zipkin Server 地址 sleuth: sampler: probability: 1.0 # 采樣率(1.0 表示 100% 采集)
步驟 3:啟動 Zipkin Server
通過 Docker 快速啟動 Zipkin:
docker run -d -p 9411:9411 openzipkin/zipkin
步驟 4:驗證鏈路追蹤
發(fā)起請求
在 order-service調(diào)用 user-service的接口(如 /users)。
查看鏈路數(shù)據(jù)
- 訪問 Zipkin 控制臺:http://localhost:9411
- 搜索 Trace ID,查看完整的調(diào)用鏈路。
示例:
- order-service ? user-service
- Trace ID: abc123xyz456
步驟 5:結(jié)合 Spring Cloud Admin 定位問題
狀態(tài)監(jiān)控
- 在 Admin Server控制面板,發(fā)現(xiàn) user-service狀態(tài)異常(如 DOWN)。
日志輔助
- 通過 Admin Server動態(tài)調(diào)整 user-service的 日志級別為 DEBUG,查看詳細錯誤日志。
跳轉(zhuǎn) Zipkin
- 在 Admin Server的 服務(wù)詳情頁,直接跳轉(zhuǎn)到 Zipkin 控制臺,分析異常請求的完整鏈路。
3. 關(guān)鍵問題解答
Q1:鏈路追蹤是 Spring Cloud Admin 的功能嗎?
否。鏈路追蹤由 Sleuth + Zipkin實現(xiàn),是 Spring Cloud 微服務(wù)的通用能力。
Admin Server 的作用:
- 提供集中化入口,關(guān)聯(lián)服務(wù)健康狀態(tài)、日志與鏈路追蹤數(shù)據(jù)。
- 輔助開發(fā)者快速定位問題(如:服務(wù)異常時,直接跳轉(zhuǎn)至 Zipkin分析鏈路)。
Q2:Admin Server 是否需要額外配置以支持鏈路追蹤?
否。Admin Server 無需特殊配置,只需確保微服務(wù)正確集成 Sleuth + Zipkin。
Admin Server 僅作為監(jiān)控入口,不存儲或處理鏈路數(shù)據(jù)。
三、Spring Cloud 鏈路監(jiān)控(Admin)集成示例
1. 場景
構(gòu)建一個包含 user-service和 order-service的微服務(wù)系統(tǒng),通過 Spring Cloud Admin實現(xiàn)以下目標(biāo):
- 集中化監(jiān)控服務(wù)的健康狀態(tài)與性能指標(biāo)。
- 集成郵件告警,實時接收服務(wù)異常通知。
2. 配置步驟與驗證
本示例基于 第二部分的示例 1(直接注冊到 Admin Server),僅補充關(guān)鍵集成步驟:
步驟1: Admin Server 配置
- 創(chuàng)建 Admin Server應(yīng)用(參考 2.2 節(jié)示例 1代碼)。
- 啟動后訪問 http://localhost:8080進入控制面板。
步驟2:客戶端服務(wù)注冊
- 在 user-service和 order-service中添加 Admin Client依賴(見 2.2 節(jié)示例 1)。
- 配置 spring.boot.admin.client.url指向 Admin Server(代碼與配置參考 2.2 節(jié))。
步驟3:郵件告警集成
- 在 Admin Server的 application.yml中配置 SMTP 和郵件接收地址(配置代碼直接復(fù)用 2.3 節(jié)示例 1)。
步驟4:全鏈路驗證
- 健康檢查:訪問 Admin控制面板,確認服務(wù)狀態(tài)為 UP。
- 告警觸發(fā):手動關(guān)閉 user-service,觀察控制面板狀態(tài)變更為 DOWN,并檢查收件箱是否收到告警郵件。
本示例展示了如何快速構(gòu)建一個包含 健康監(jiān)控、集中化管理和實時告警的完整鏈路監(jiān)控體系,適用于 中小型項目快速落地。
四、Spring Cloud 鏈路監(jiān)控(Admin)最佳實踐
4.1 分級告警策略
1. 低優(yōu)先級告警(非緊急問題)
- 通知方式:通過 Slack 通知(配置參考 2.3 節(jié)示例 2)。
- 適用場景:適用于服務(wù)降級、非核心服務(wù)異常、臨時性能波動等情況。
2. 高優(yōu)先級告警(關(guān)鍵故障)
- 通知方式:通過 郵件 + 短信雙通道,確保核心服務(wù)問題 及時響應(yīng)。
配置示例:
Admin Server 的 application.yml
spring: cloud: admin: notify: mail: enabled: true # 郵件配置參考 2.3 節(jié)示例1 sms: enabled: true phone-numbers: +1234567890 # 接收短信的手機號
AWS SNS 短信服務(wù)配置
aws: sns: topic-arn: arn:aws:sns:us-east-1:1234567890:alert-topic # SNS 主題 ARN region: us-east-1 # AWS 區(qū)域 access-key: ${AWS_ACCESS_KEY} # 從環(huán)境變量注入訪問密鑰 secret-key: ${AWS_SECRET_KEY} # 從環(huán)境變量注入密鑰
依賴項
在 Admin Server 的 pom.xml 中添加 AWS SNS 依賴
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-sns</artifactId> <version>1.12.500</version> </dependency>
驗證步驟:
模擬服務(wù)宕機
- 關(guān)閉核心服務(wù)(如 user-service)。
- 觀察 Admin Server控制面板,確認服務(wù)狀態(tài)變?yōu)?DOWN。
檢查告警通知
- 郵件:登錄 admin@example.com郵箱,確認收到 標(biāo)題為 [緊急告警]
- 服務(wù)異常:user-service的郵件。
- 短信:檢查手機 +1234567890是否收到 包含 [CRITICAL] user-service 已宕機的短信。
3. 注意事項
敏感信息保護:
- access-key和 secret-key應(yīng)通過環(huán)境變量或配置中心管理,禁止硬編碼。
失敗回退:
- 建議配置重試機制,避免短信服務(wù)不可用時告警丟失。
4.2 擴展監(jiān)控能力
1. 自定義健康檢查
- 通過實現(xiàn) HealthIndicator 接口(實現(xiàn)邏輯參考 2.1 節(jié)示例),擴展健康檢查邏輯,例如:
- 監(jiān)控依賴的第三方 API 狀態(tài)。
- 檢測數(shù)據(jù)庫連接、緩存可用性。
2. 日志動態(tài)調(diào)整
- Admin Server支持 實時調(diào)整服務(wù)日志級別,無需重啟服務(wù)。
- 操作命令參考 2.4 節(jié)示例 1。
4.3 高可用部署方案
1.Admin Server 集群化
部署多個 Admin Server 實例,通過 Redis 共享監(jiān)控數(shù)據(jù),提高系統(tǒng)可用性。
配置示例(Admin Server 連接 Redis)
spring: redis: host: redis-host port: 6379 boot: admin: redis: enabled: true
2.客戶端重試機制
配置客戶端在 Admin Server 短暫不可用時自動重試,提高穩(wěn)定性。
配置示例(客戶端重試)
spring: boot: admin: client: url: http://admin-server:8080 retry: max-attempts: 3
initial-interval: 1000
驗證步驟
查看客戶端日志,確認重試行為,例如:
Retrying to connect to Admin Server...
4.4 生產(chǎn)環(huán)境建議
1. 資源隔離
- Admin Server部署在 獨立集群,避免與業(yè)務(wù)服務(wù)爭搶資源。
2.安全加固
- 為 Actuator 端點添加認證(集成 Spring Security)。
- 限制 /actuator 端點的公網(wǎng)暴露,避免安全風(fēng)險。
3.監(jiān)控數(shù)據(jù)歸檔
- 定期導(dǎo)出健康檢查記錄到 Elasticsearch,便于 歷史追溯與分析。
總結(jié)
核心總結(jié)
Spring Cloud Admin的核心價值與功能:
1. 開箱即用的監(jiān)控方案
- 基于 Spring Boot Actuator提供 健康檢查(如 數(shù)據(jù)庫、磁盤空間)、性能指標(biāo)(CPU、內(nèi)存)等核心功能。
- 支持 自定義健康檢查邏輯(通過 HealthIndicator接口)。
2. 多通道實時告警
- 集成郵件、Slack等通知渠道,支持分級告警策略(如 、非緊急問題推送 Slack,關(guān)鍵故障觸發(fā)郵件 + 短信)。
3. 集中化管控優(yōu)勢
- 統(tǒng)一 監(jiān)控面板展示所有服務(wù)狀態(tài),支持 動態(tài)調(diào)整日志級別,并可集成 Sleuth/Zipkin實現(xiàn) 鏈路追蹤。
4. 高可用與擴展性
- 支持 Admin Server 集群部署,結(jié)合客戶端重試機制保障監(jiān)控穩(wěn)定性。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決Error:(1,?1)?java:?非法字符:?'\ufeff'問題
這篇文章主要介紹了解決Error:(1,?1)?java:?非法字符:?'\ufeff'問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11使用JVMTI實現(xiàn)SpringBoot的jar加密,防止反編譯
這篇文章主要介紹了使用JVMTI實現(xiàn)SpringBoot的jar加密,防止反編譯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08Java中instanceOf關(guān)鍵字的用法及特性詳解
當(dāng)我們在進行向下轉(zhuǎn)型時,如果兩個對象之間沒有直接或間接的繼承關(guān)系,在轉(zhuǎn)換時有可能會產(chǎn)生強制類型轉(zhuǎn)換異常,我們可以使用java中自帶的instanceOf關(guān)鍵字來解決這個問題,所以本篇文章,會帶大家學(xué)習(xí)instanceOf的用法及特性,需要的朋友可以參考下2023-05-05