使用Nacos 打造微服務配置中心

一、背景介紹

Nacos 作為服務注冊中心的使用方式,同時 Nacos 還可以作為服務配置中心,用于集中式維護各個業務微服務的配置資源。

作為服務配置中心的交互流程圖如下。

這樣設計的目的,有一個明顯的好處就是:有利于對各個微服務的配置資源進行統一維護和管理,尤其是要更新某個配置參數時,能避免大量人肉運維工作。

今天通過一些案例我們一起來了解一下,如何使用 Nacos 來實現服務配置中心的管理。

二、方案實踐

2.1、創建配置

Nacos 安裝過程與之前介紹的一樣,Nacos 服務端啟動后,進入到服務端管理頁面,在“配置列表”功能頁面中,點擊右上角的“+”按鈕,進入“新建配置”頁面,創建配置內容,示例如下:

為了便于演示,在上文中我們創建了一個 dataId 為nacos-config-client.properties,Group 為DEFAULT_GROUP,內容為blog.name=張三的配置信息。

在下文中,我們將會用到它。

2.2、創建客戶端應用

首先,創建一個 Maven 工程,命名為nacos-config-client,并在pom.xml中引入相關的依賴內容,示例如下:

<properties><spring-boot.version>2.2.5.RELEASE</spring-boot.version><spring-cloud.version>Hoxton.SR3</spring-cloud.version><spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
</properties><dependencies><!-- SpringBoot web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Nacos 配置中心 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
</dependencies><dependencyManagement><dependencies><!-- 引入 springBoot 版本號 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!-- 引入 spring cloud 版本號 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- 引入 spring cloud alibaba 適配的版本號 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

接著,創建一個服務啟動類。

@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args);}
}

然后,創建一個 web 接口,以便測試上文創建的配置變量是否能生效。

@RestController
@RefreshScope
public class HelloController {@Value("${blog.name}")private String name;@RequestMapping("/hello")public String hello() {return name;}
}

最后,在application.properties配置文件中,添加 Nacos 服務配置中心地址,示例如下:

spring.application.name=nacos-config-client
server.port=9012# 設置Nacos配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

2.3、服務測試

nacos-config-client客戶端服務啟動起來,在瀏覽器中訪問http://127.0.0.1:9012/hello,如果不出意外的話,會返回如下結果。

此時說明 SpringBoot 已成功從 Nacos 服務端獲取到相關的配置變量。

下面我們在 Nacos 中將blog.name配置內容稍微修改一下,驗證一下客戶端的配置變量是否能動態刷新。

再次訪問http://127.0.0.1:9012/hello,返回結果如下圖。

說明在 Nacos 中修改配置變量后,SpringBoot 也會自動刷新這個配置信息。

之所以能實現這種效果,主要得益于@RefreshScope注解,它可以動態的從 Nacos 服務端獲取最新的配置信息,并將其注入到 SpringBoot 中。

三、配置規則介紹

在上文中,我們簡單的介紹了 Nacos 作為配置中心的使用方式。

例子中我們只配置了 Nacos 的配置中心地址信息,并沒有配置任何其他規則就能成功的使用 Nacos 配置中心,它是如何做到的呢?

在 Nacos Spring Cloud 中有 5 個核心配置項,下面我們一起來看看它的作用。

  • spring.cloud.nacos.config.server-addr:對應 Nacos 服務端地址
  • spring.cloud.nacos.config.prefix:對應 DataId 的前綴,默認值為應用名稱,即spring.application.name變量值
  • spring.cloud.nacos.config.file-extension:對應 DataId 的后綴,同時也是配置內容的文件格式,默認值為properties
  • spring.cloud.nacos.config.group:對應 Group 參數,默認值為DEFAULT_GROUP
  • spring.cloud.nacos.config.namespace:對應配置的命名空間,默認為空;常用于不同環境的配置隔離,如開發測試環境和生產環境的資源隔離等

默認情況下,Nacos Spring Cloud 加載出來的 dataId 完整格式如下:

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

因此,在不做任何配置項目的情況下,當 DataId 的前綴和 Spring Boot 應用名稱一致,就可以成功加載對應的配置項。

如果我們不想通過應用服務名稱來加載 DataId,可以借助spring.cloud.nacos.config.prefix相關規則來實現指定配置項的加載。

需要特別注意的是:由于 Spring Boot 加載順序的緣故,自定義的配置項參數必須放在bootstrap.properties文件或者bootstrap.yaml文件中才能生效。

下面我們還是通過一個例子,來快速了解 Nacos Spring Cloud 相關配置規則的應用。

3.1、應用實踐

下面我們以加載myConfig-dev.yaml配置項為例,具體實現如下。

首先,創建一個myConfig-dev配置項。

接著,創建一個bootstrap.properties文件,并指定相關配置項,內容如下:

spring.application.name=nacos-config-client
server.port=9012# 指定運行環境
spring.profiles.active=dev# 設置Nacos配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 對應 DataId 的前綴,如果不設置默認取【spring.application.name】
spring.cloud.nacos.config.prefix=myConfig
# 對應 DataId 的后綴,同時也是配置內容的文件格式,默認值為properties
spring.cloud.nacos.config.file-extension=yaml
# 對應 Group 參數,默認值為DEFAULT_GROUP
spring.cloud.nacos.config.group=DEFAULT_GROUP
# 對應配置的命名空間,默認為空
spring.cloud.nacos.config.namespace=

然后,創建一個 web 接口,以便驗證配置變量是否能生效。

@RestController
@RefreshScope
public class HelloController {@Value("${user.id}")private String id;@Value("${user.name}")private String name;@RequestMapping("/test")public String test() {return "id" + id + ",name:" + name;}
}

最后,再次啟動服務,在瀏覽器中訪問http://127.0.0.1:9012/hello,如果不出意外的話,會返回如下內容。

說明,Spring Boot 已成功加載了指定配置項。

四、高級特性介紹

4.1、多環境配置介紹

在 Nacos 服務端,其實還隱含有三個核心的參數,分別是:Data IDGroupNamespace,我們可以利用它來實現更高級的功能。

這三個參數的層級關系,可以用如下圖來概括。

每個參數的作用如下:

  • Namespace:表示命名空間,通常用于不同環境的配置隔離,如開發測試環境和生產環境的資源隔離等
  • Group:表示分組管理
  • Data ID:也就是我們常說的配置項,也可以簡單理解為我們所說的配置文件

實際上,我們可以利用這些層級概念的關系,根據自己的需要來實現多環境的管理。

下面我們一起來看看,幾種常見的環境隔離配置實現。

4.1.1、profiles 隔離實現

在上文中我們也提到了 dataId 完整格式生成規則。

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

因此,我們可以借助spring.profiles.active來實現配置資源的隔離。

同時,profiles 隔離實現也在一種最常見的做法。

4.1.2、Group 隔離實現

Group 隔離實現就比較簡單了,在 Nacos 服務管理平臺新建配置的時候,填寫所屬分組。

最后,在客戶端應用下填寫對應的 Group 參數即可。

# 對應 Group 參數
spring.cloud.nacos.config.group=DEFAULT_GROUP
4.1.3、Namespace 隔離實現

Namespace 隔離實現主要通過命名空間來完成,在 Nacos 服務管理平臺的命令空間下創建。

創建完成之后,在配置列表的最上方可以看到除了 public 之外,多了一個剛才創建的 Namepsace。

點擊test就可以切換到對應的命名空間,然后新建相關的配置項。

最后,在客戶端應用下填寫對應的 Namespace 參數即可。

# 對應配置的命名空間
spring.cloud.nacos.config.namespace=0c85c5cf-4421-4839-9998-ace7d8ecf5a8

需要注意的是,這里填寫不是命名空間的名稱,而是命名空間ID。

4.2、多文件加載介紹

在上文中我們介紹的都是單個配置文件的加載,而在實際的業務開發中,我們常常會碰到多個配置文件一起加載的場景,例如加載 Redis、RabbitMQ 等配置資源。

下面我們一起來看看相關的實現方式。

4.2.1、多個配置加載介紹

對于多個配置的加載,我們只需要做以下兩步,就可以實現這個需求。

第一步:在 Nacos 中創建Data ID=redis.propertiesData ID=rabbitmq.properties的配置內容。

第二步:在 Spring Cloud 應用bootstrap.properties文件中,通過spring.cloud.nacos.config.extension-configs參數配置需要加載的文件,具體如下。

# 設置多文件加載,并支持動態刷新
spring.cloud.nacos.config.extension-configs[0].data-id=redis.properties
spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=rabbitmq.properties
spring.cloud.nacos.config.extension-configs[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[1].refresh=true

當服務啟動的時候,Nacos 客戶端會自動從服務端獲取相關的配置資源加載到 Spring Boot 應用中。

4.2.2、共享配置加載介紹

通過上面加載多個配置文件的例子,我們已經可以實現不同的應用共享配置的需求了。

對于共享配置使用,Nacos 還提供了另一種更便捷的配置方式,比如下面的配置與上面使用的多文件加載配置,作用是等價的。

# 設置多個共享配置文件加載,并支持動態刷新
spring.cloud.nacos.config.shared-configs[0].data-id=redis.properties
spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].refresh=true
spring.cloud.nacos.config.shared-configs[1].data-id=rabbitmq.properties
spring.cloud.nacos.config.shared-configs[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[1].refresh=true
4.2.3、配置加載的優先級介紹

當我們加載多個配置的時候,如果存在相同的 key,配置加載的優先級是怎樣的呢?

Nacos Config 目前提供了三種配置能力從 Nacos 拉取相關的配置,分別如下:

  • A:通過spring.cloud.nacos.config.shared-dataids定義的共享配置
  • B:通過spring.cloud.nacos.config.ext-config[n].data-id定義的擴展配置
  • C:通過內部相關規則(應用名、應用名+ Profile)生成的配置

當三種方式同時存在的時候,他們的優先級關系為A < B < C,也就是說優先級高的會覆蓋優先級底的配置。

五、小結

最后總結一下,Nacos 是 Spring Cloud Alibaba 體系中最重要的組件之一,既可以用于服務注冊中心,也可以用于服務配置中心。在微服務技術體系中,應用非常廣泛,因此掌握 Nacos 相關技術的使用,對我們項目的開發會有顯著的幫助。

六、實戰

1. 安裝與啟動 Nacos

下載 Nacos

從 Nacos 的 GitHub 倉庫(https://github.com/alibaba/nacos/releases)下載適合你系統的版本,解壓下載好的壓縮包。

啟動 Nacos
  • Windows 系統:打開命令提示符,進入 Nacos 的 bin 目錄,執行以下命令啟動 Nacos:
startup.cmd -m standalone
  • Linux/Mac 系統:打開終端,進入 Nacos 的 bin 目錄,執行以下命令啟動 Nacos:


?

這里的 -m standalone 表示以單機模式啟動。啟動成功后,在瀏覽器中訪問 http://localhost:8848/nacos,使用默認用戶名 nacos 和密碼 nacos 登錄 Nacos 控制臺。

2. 創建配置

登錄 Nacos 控制臺

打開瀏覽器,訪問 http://localhost:8848/nacos,輸入用戶名 nacos 和密碼 nacos 登錄。

創建配置文件

在控制臺左側導航欄中選擇 “配置管理” -> “配置列表”,點擊 “+” 號創建新的配置。填寫以下信息
?

  • Data ID:配置文件的唯一標識,通常采用 應用名.properties應用名.yml 的格式,例如 example-service.properties
  • Group:配置分組,默認為 DEFAULT_GROUP
  • 配置格式:根據實際情況選擇 propertiesyaml
  • 配置內容:輸入具體的配置信息,例如在 example-service.properties 中可以添加如下內容:
    ?

properties

server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/example_db
spring.datasource.username=root
spring.datasource.password=123456

3. 在微服務中集成 Nacos 配置中心

添加依賴

以 Spring Boot 項目為例,在 pom.xml 中添加 Nacos 配置中心的依賴:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
配置 Nacos 客戶端

src/main/resources 目錄下創建 bootstrap.propertiesbootstrap.yml 文件,添加以下配置:

spring.application.name=example-service
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.file-extension=properties


?

這里的 spring.application.name 要與在 Nacos 控制臺創建的配置文件的 Data ID 中的應用名一致,spring.cloud.nacos.config.server-addr 是 Nacos 服務器的地址,spring.cloud.nacos.config.file-extension 是配置文件的格式。

獲取配置信息

在 Spring Boot 項目中,可以使用 @Value 注解或 @ConfigurationProperties 注解來獲取配置信息。以下是使用 @Value 注解的示例:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ConfigController {@Value("${server.port}")private String serverPort;@GetMapping("/config")public String getConfig() {return "Server port: " + serverPort;}
}

4. 動態刷新配置

開啟動態刷新

在需要動態刷新配置的類上添加 @RefreshScope 注解,例如:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RefreshScope
public class ConfigController {@Value("${server.port}")private String serverPort;@GetMapping("/config")public String getConfig() {return "Server port: " + serverPort;}
}
測試動態刷新

當在 Nacos 控制臺修改配置信息并發布后,無需重啟微服務,調用 /config 接口即可獲取到最新的配置信息。

5. 多環境配置管理

創建不同環境的配置文件

在 Nacos 控制臺分別創建不同環境(如開發、測試、生產)的配置文件,例如 example-service-dev.propertiesexample-service-test.propertiesexample-service-prod.properties

根據環境加載配置

bootstrap.properties 中添加 spring.profiles.active 屬性來指定當前環境,例如:

spring.application.name=example-service
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.file-extension=properties
spring.profiles.active=dev

這樣,微服務將加載 example-service-dev.properties 中的配置信息。

通過以上步驟,你就可以使用 Nacos 打造一個功能完善的微服務配置中心,實現配置的集中管理和動態刷新。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78385.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78385.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78385.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenCv高階(十一)——物體跟蹤

文章目錄 前言一、OpenCV 中的物體跟蹤算法1、均值漂移&#xff08;Mean Shift&#xff09;&#xff1a;2、CamShift&#xff1a;3、KCF&#xff08;Kernelized Correlation Filters&#xff09;&#xff1a;4、MIL&#xff08;Multiple Instance Learning&#xff09;&#xf…

聲音分離人聲和配樂base,vocals,drums -從頭設計數字生命第6課, demucs——仙盟創夢IDE

demucs -n htdemucs --two-stemsvocals 未來之窗.mp3 demucs -n htdemucs --shifts5 之.mp3demucs -n htdemucs --shifts5 -o wlzcoutspl 未來之窗.mp3 伴奏提取人聲分離技術具有多方面的重大意義&#xff0c;主要體現在以下幾個領域&#xff1a; 音樂創作與制作 創作便利…

使用若依二次開發商城系統-4:商品屬性

功能3&#xff1a;商品分類 功能2&#xff1a;商品品牌 功能1&#xff1a;搭建若依運行環境前言 商品屬性功能類似若依自帶的字典管理&#xff0c;分兩步&#xff0c;先設置屬性名&#xff0c;再設置對應的屬性值。 一.操作步驟 1&#xff09;數據庫表product_property和pro…

操作指南:vLLM 部署開源大語言模型(LLM)

vLLM 是一個專為高效部署大語言模型&#xff08;LLM&#xff09;設計的開源推理框架&#xff0c;其核心優勢在于顯存優化、高吞吐量及云原生支持。 vLLM 部署開源大模型的詳細步驟及優化策略&#xff1a; 一、環境準備與安裝 安裝 vLLM 基礎安裝&#xff1a;通過 pip 直接安裝…

32.768kHz晶振詳解:作用、特性及與其他晶振的區別

一、32.768kHz晶振的核心作用 實時時鐘&#xff08;RTC&#xff09;驅動&#xff1a; 提供精確的1Hz時鐘信號&#xff0c;用于計時功能&#xff08;如電子表、計算機CMOS時鐘&#xff09;。 分頻公式&#xff1a; 1Hz 32.768kHz / 2^15&#xff08;通過15級二分頻實現&#x…

第3講、大模型如何理解和表示單詞:詞嵌入向量原理詳解

1. 引言 大型語言模型&#xff08;Large Language Models&#xff0c;簡稱LLM&#xff09;如GPT-4、Claude和LLaMA等近年來取得了突破性進展&#xff0c;能夠生成流暢自然的文本、回答復雜問題、甚至編寫代碼。但這些模型究竟是如何理解人類語言的&#xff1f;它們如何表示和處…

【Java面試筆記:進階】19.Java并發包提供了哪些并發工具類?

Java 并發包(java.util.concurrent)提供了一系列強大的工具類,用于簡化多線程編程、提升并發性能并確保線程安全。 1. Java 并發包的核心內容 并發包概述:java.util.concurrent 包及其子包提供了豐富的并發工具類,用于簡化多線程編程。主要組成部分: 高級同步結構:如 C…

Matlab數字信號處理——小波閾值法去噪分析系統

&#x1f527; 系統簡介 本系統通過 MATLAB GUI 圖形界面&#xff0c;集成了 小波閾值去噪算法 的各個核心模塊&#xff0c;可以實現以下功能&#xff1a; 打開語音文件&#xff1a;支持常見音頻格式讀取&#xff1b; 模擬加噪&#xff1a;系統內置白噪聲模擬功能&#xff0…

EDI 如何與 ERP,CRM,WMS等系統集成

在數字化浪潮下&#xff0c;與制造供應鏈相關產業正加速向智能化供應鏈轉型。傳統人工處理訂單、庫存和物流的方式已難以滿足下單客戶對響應速度和數據準確性的嚴苛要求。EDI技術作為企業間數據交換的核心樞紐&#xff0c;其與ERP、CRM、WMS等業務系統的深度集成&#xff0c;成…

計算機組成原理-408考點-數的表示

常見題型&#xff1a;C語言中的有符號數和無符號數的表示。 【例】有如下C語言程序段: short si-32767&#xff1b;unsigned short usisi&#xff1b;執行上述兩條語句后&#xff0c;usi的值為___。short和unsigned short均使用16位二進制數表示。 【分析】考點&#xff1a;同…

企業級AI開發利器:Spring AI框架深度解析與實戰

企業級AI開發利器&#xff1a;Spring AI框架深度解析與實戰 一、前言&#xff1a;Java生態的AI新紀元 在人工智能技術爆發式發展的今天&#xff0c;Java開發者面臨著一個新的挑戰&#xff1a;如何將大語言模型&#xff08;LLMs&#xff09;和生成式AI&#xff08;GenAI&#…

【金倉數據庫征文】——選擇金倉,選擇勝利

目錄 第一部分&#xff1a;金倉數據庫——開創數據庫技術的新時代 1.1 金倉數據庫的技術底蘊 1.2 高可用架構與災備能力 1.3 分布式架構與彈性擴展能力 第二部分&#xff1a;金倉數據庫助力行業數字化轉型 2.1 電信行業&#xff1a;核心系統國產化替代 2.2 醫療行業&…

用C語言實現——一個中綴表達式的計算器。支持用戶輸入和動畫演示過程。

一、思路概要和知識回顧 1.思路概要 ①中綴表達式計算&#xff1a; 需要處理運算符的優先級&#xff0c;可能需要用到棧結構。 ??如何將中綴表達式轉換為后綴表達式&#xff1f;或者直接計算&#xff1f; 通常&#xff0c;中綴轉后綴&#xff08;逆波蘭式&#xff09;再…

Langchain_Agent+數據庫

本處使用Agent數據庫&#xff0c;可以直接執行SQL語句。可以多次循環查詢問題 前文通過chain去聯系數據庫并進行操作&#xff1b; 通過鏈的不斷內嵌組合&#xff0c;生成SQL在執行SQL再返回。 初始化 import os from operator import itemgetterimport bs4 from langchain.ch…

Python 爬蟲如何偽裝 Referer?從隨機生成到動態匹配

一、Referer 的作用與重要性 Referer 是 HTTP 請求頭中的一個字段&#xff0c;用于標識請求的來源頁面。它在網站的正常運行中扮演著重要角色&#xff0c;例如用于統計流量來源、防止惡意鏈接等。然而&#xff0c;對于爬蟲來說&#xff0c;Referer 也可能成為被識別為爬蟲的關…

Post-Processing PropertySource instance詳解 和 BeanFactoryPostProcessor詳解

PropertySourcesBeanFactoryPostProcessor詳解 1. 核心概念 BeanFactoryPostProcessor 是 Spring 框架中用于在 BeanFactory 初始化階段 對 Environment 中的 PropertySource 進行后處理的接口。它允許開發者在 Bean 創建之前 對屬性源進行動態修改&#xff0c;例如添加、刪除…

[C]基礎13.深入理解指針(5)

博客主頁&#xff1a;向不悔本篇專欄&#xff1a;[C]您的支持&#xff0c;是我的創作動力。 文章目錄 0、總結1、sizeof和strlen的對比1.1 sizeof1.2 strlen1.3 sizeof和strlen的對比 2、數組和指針筆試題解析2.1 一維數組2.2 字符數組2.2.1 代碼12.2.2 代碼22.2.3 代碼32.2.4 …

賽靈思 XCKU115-2FLVB2104I Xilinx Kintex UltraScale FPGA

XCKU115-2FLVB2104I 是 AMD Xilinx Kintex UltraScale FPGA&#xff0c;基于 20 nm 先進工藝&#xff0c;提供高達 1 451 100 個邏輯單元&#xff08;Logic Cells&#xff09;&#xff0c;77 721 600 bit 的片上 RAM 資源&#xff0c;以及 5 520 個 DSP 切片&#xff08;DSP48E…

CAPL編程_03

1_文件操作的相關函數&#xff1a; 讀文本文件內容 讀取文本文件操作的三部曲 1&#xff09;打開文件 —— openFileRead ( ) 2&#xff09;逐行讀取 —— fileGetString ( ) 、fileGetStringSZ ( ) 3&#xff09;關閉文件 —— fileClose ( ) char content[100];…

2025年江西建筑安全員A證適合報考人群

江西建筑安全員A證適合報考人群 江西省建筑安全員A證&#xff08;建筑施工企業主要負責人安全生產考核合格證書&#xff09;主要面向建筑行業管理人員&#xff0c;適合以下人員報考&#xff1a; 1. 企業主要負責人 法人代表、總經理、分管安全副總&#xff1a;依法需持A證&a…