Nacos-3.0.0適配PostgreSQL數據庫

🧑 博主簡介:CSDN博客專家歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c=1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編程高并發設計Springboot和微服務,熟悉LinuxESXI虛擬化以及云原生Docker和K8s,熱衷于探索科技的邊界,并將理論知識轉化為實際應用。保持對新技術的好奇心,樂于分享所學,希望通過我的實踐經歷和見解,啟發他人的創新思維。在這里,我希望能與志同道合的朋友交流探討,共同進步,一起在技術的世界里不斷學習成長。
技術合作請加本人wx(注明來自csdn):foreast_sea

在這里插入圖片描述


在這里插入圖片描述

Nacos-3.0.0適配PostgreSQL數據庫

引言

前段時間寫了一篇文章叫“Nacos-2.4.0最新版本,postgresql插件適配器修改分享”,旨在解決nacos適配PostgreSQL數據庫的問題,因為阿里巴巴nacos開發團隊太忙了,一直忙著迭代開發nacos,給大家持續貢獻更多更優秀的功能。

但是每次發布nacos版本時,卻忘了及時更新nacos對應的其他數據源支持,比如大家常用的PostgreSQL數據庫,就有好多伙伴在網上搜索nacos的PostgreSQL數據庫支持插件!卻很難找到一個現成能用的,最終都只能接受一個辦法,那就是下載nacos的多數據源項目源碼自己在本地修改bug后打包!有這類需求的朋友,心里應該都清楚,幾經折騰很想放棄,但是心有不甘,好不容易走到下載代碼后,修改打包這一步,換來的卻是無數次失敗,真的夠大家使勁折騰一番!


好了,廢話不多說,相信大家都知道了,前幾天nacos官方發出了新版本3.0.0正式版,這個版本可謂是花了不少心血啊,前后差不多耗時三五個月,新版本確實有很多大家備受期待的功能,比如:

  1. 身份驗證機制?:支持多種身份驗證方式,如OAuth 2.0JWT,確保只有經過授權的用戶才能訪問敏感數據。
  2. 細粒度權限控制?:管理員可以為不同的用戶和角色設置詳細的權限,實現更精細的訪問控制。
  3. 加密算法?:引入更強大的加密算法,如AES-256,確保數據在傳輸和存儲過程中的安全性?。
  4. 配置灰度管理?:支持記錄配置灰度歷史,方便用戶在配置灰度變更后能夠查詢到之前的變更歷史記錄和內容,提升了配置變更期間的穩定性和可用性?。
  5. 尋址邏輯統一?:優化了客戶端和服務端的尋址模塊,減少了代碼冗余,提高了系統的穩定性和可維護性?。

看到這些新特性,相信大家心里應該都迫不及待想體驗了,不過對于使用MySQL的朋友們,確實很方便,不需要那么折騰,因為nacos自身默認使用的就是Mysql,因此本文可能不太需要關注。但是對于想用其他數據庫的朋友們,比如想基于PostgreSQL數據庫存儲nacos數據的朋友們,今天這篇文章就是大家期待的!

本文重點介紹基于Nacos-3.0.0最新版本如何用PostgreSQL數據庫來存儲,也就是如何打造或直接獲取能適配Nacos-3.0.0PostgreSQL數據庫插件。


Nacos-3.0.0版本最直接最快集成PostgreSQL數據源的方法就是引入依賴,這也是本文重點,也就是核心部分,我把它放這里:

<dependency><groupId>com.sinhy</groupId><artifactId>nacos-postgresql-datasource-plugin-ext</artifactId><version>3.0.0</version>
</dependency>

我已將pg數據源插件打成了jar包,傳到maven中央倉庫,大家只需下載該jar,然后放入nacoshome目錄下的plugins插件目錄,再配置pg數據源信息,即可使用!

一、PostgreSQL數據庫源碼地址

為了方便后續及時更新Nacos每個版本對應的PostgreSQL數據庫插件,我們特意基于官方提供的Nacos插件工程進行了二開,然后打算后續自己維護這部分功能,因此給大家分享:
Nacos-3.0.0PostgreSQL數據庫插件源碼地址
https://github.com/lilinhai/nacos-datasource-plugin-ext

注意:目前該工程中,只有PostgreSQL插件可以正常使用,其余數據庫暫未做相關深入適配和測試!

1.1 nacos-3.0.0新增表config_info_gray

config_info_gray這個表是nacos-3.0.0新增的,用于灰度管理配置,支持記錄配置灰度歷史,方便用戶在配置灰度變更后能夠查詢到之前的變更歷史記錄和內容,提升了配置變更期間的穩定性和可用性?。以下是該表的postgresql適配。

DROP TABLE IF EXISTS "config_info_gray";
CREATE TABLE "config_info_gray" ("id" bigserial NOT NULL,"data_id" varchar(255) NOT NULL,"group_id" varchar(128) NOT NULL,"content" text NOT NULL,"md5" varchar(32),"src_user" text,"src_ip" varchar(100) NOT NULL,"gmt_create" timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,"gmt_modified" timestamp(6) NOT NULL,"app_name" varchar(128) DEFAULT NULL::character varying,"tenant_id" varchar(128) DEFAULT ''::character varying,"gray_name" varchar(128) NOT NULL,"gray_rule" text NOT NULL,"encrypted_data_key" varchar(256) NOT NULL
);
COMMENT ON COLUMN "config_info_gray"."id" IS '自增ID';
COMMENT ON COLUMN "config_info_gray"."data_id" IS 'data_id';
COMMENT ON COLUMN "config_info_gray"."group_id" IS 'group_id';
COMMENT ON COLUMN "config_info_gray"."content" IS 'content';
COMMENT ON COLUMN "config_info_gray"."md5" IS 'md5';
COMMENT ON COLUMN "config_info_gray"."src_user" IS 'src_user';
COMMENT ON COLUMN "config_info_gray"."src_ip" IS 'src_ip';
COMMENT ON COLUMN "config_info_gray"."gmt_create" IS 'gmt_create';
COMMENT ON COLUMN "config_info_gray"."gmt_modified" IS 'gmt_modified';
COMMENT ON COLUMN "config_info_gray"."app_name" IS 'app_name';
COMMENT ON COLUMN "config_info_gray"."tenant_id" IS 'tenant_id';
COMMENT ON COLUMN "config_info_gray"."gray_name" IS 'gray_name';
COMMENT ON COLUMN "config_info_gray"."gray_rule" IS 'gray_rule';
COMMENT ON COLUMN "config_info_gray"."encrypted_data_key" IS 'encrypted_data_key';-- ----------------------------
-- Primary Key structure for table config_info_gray
-- ----------------------------
ALTER TABLE "config_info_gray" ADD CONSTRAINT "config_info_gray_pkey" PRIMARY KEY ("id");

1.2 nacos-3.0.0廢棄表config_info_aggr

config_info_aggr表在Nacos 3.0版本中不存在了?。在Nacos的早期版本中,config_info_aggr表用于存儲聚合后的配置信息,主要用于集群環境中配置信息的聚合和同步。然而,在Nacos 3.0版本中,這一功能已經被重新設計和優化,不再依賴于單獨的config_info_aggr表來實現。

1.3 Nacos 3.0中的變化

Nacos 3.0版本對配置管理進行了重大改進,主要包括以下幾個方面:

  1. 去中心化存儲?:在Nacos 3.0中,配置信息不再集中存儲在單一的數據庫表中,而是分散存儲在多個表中,每個服務或命名空間都有自己的數據表。這種設計減少了單一故障點,提高了系統的可靠性和擴展性。
  2. 優化查詢性能?:通過改進查詢邏輯和索引策略,Nacos 3.0顯著提升了查詢性能,尤其是在大規模配置管理場景下。
  3. 更好的兼容性和擴展性?:新版本支持更多的數據庫類型和更靈活的配置管理策略,使得Nacos能夠更好地適應不同的使用場景和需求。

Nacos 3.0版本的功能改進

Nacos 3.0不僅去除了config_info_aggr表,還引入了其他重要的功能和改進:

  1. 更強的擴展性?:支持更多的服務發現和配置管理場景,包括微服務架構、云原生應用等。
  2. 更高的可靠性?:通過分布式架構設計,提高了系統的穩定性和可用性。
  3. 更好的性能?:優化了查詢和處理速度,尤其是在大數據量下表現更佳。
  4. 更靈活的配置管理?:支持更細粒度的配置管理和權限控制,滿足不同團隊和項目的需求。

二、灰度配置適配

增加了一個抽象類,用于適配其他數據庫多灰度配置表的支持:

public abstract class BaseConfigInfoGrayMapper extends AbstractDataSourceMapper implements ConfigInfoGrayMapper
{/*** <pre>構造方法</pre>* @since 2025-04-27 10:03* @param databaseDialect*/protected BaseConfigInfoGrayMapper(DatabaseDialect databaseDialect){super(databaseDialect);}@Overridepublic String getTableName(){return TableConstant.CONFIG_INFO_GRAY;}@Overridepublic MapperResult findAllConfigInfoGrayForDumpAllFetchRows(MapperContext context){String sql = " SELECT id,data_id,group_id,tenant_id,gray_name,gray_rule,app_name,content,md5,gmt_modified " + " FROM  config_info_gray  ORDER BY id ";sql = databaseDialect.getLimitPageSqlWithOffset(sql, context.getStartRow(), context.getPageSize());return new MapperResult(sql, Collections.emptyList());}
}

三、源碼打包構建

源碼下載本地后,也可以手動打包構建,輸出pg插件,如下圖:
在這里插入圖片描述
執行maven構建命令:

clean package

將輸出jar到target目錄下:
在這里插入圖片描述將jar拷貝到nacos的plugins目錄下即可
在這里插入圖片描述

四、nacos3.0 基于pg啟動

啟動需要輸入安全密鑰:
在這里插入圖片描述輸入后回車、即可訪問8080(管理端口)端口:
在這里插入圖片描述

五、插件概述

5.1、簡介

從Nacos2.2版本開始,Nacos提供了數據源擴展插件,以便讓需要進行其他數據庫適配的用戶自己編寫插件來保存數據。當前項目插件目前已簡單適配Postgresql。

當前插件項目地址:
https://github.com/lilinhai/nacos-datasource-plugin-ext

當前項目是基于Nacos3.0.0版本的擴展插件口進行開發,同時也是基于以下項目的一個分支進行的而開:
https://github.com/nacos-group/nacos-plugin/tree/develop/nacos-datasource-plugin-ext

很感謝阿里nacos團隊的貢獻,你們一如既往的迭代nacos版本,給你們說聲辛苦了,但是卻忘記了nacos的其他數據源適配,比如postgresql

5.2、插件工程結構說明

nacos-datasource-plugin-ext-base工程為數據庫插件操作的適配抽象定義。
nacos-postgresql-datasource-plugin-ext工程可打包適配Postgresql的數據庫插件

六、下載和使用

6.1、插件引入

方式一:將nacospostgresql插件下載下來,將依賴手動拷貝到nacoshome目錄下的plugins目錄下(nacos-3.0.0/plugins)即可。

  • 以下nacospostgresql插件版本僅支持nacos3.0.0,采用jdk17編譯級:
<dependency><groupId>com.sinhy</groupId><artifactId>nacos-postgresql-datasource-plugin-ext</artifactId><version>3.0.0</version>
</dependency>

方式二:下載當前插件項目源碼,打包為jar包,將該文件的路徑配置到startup.sh文件中,使用Nacosloader.path機制指定該插件的路徑,可修改startup.sh中的loader.path參數的位置進行指定。

6.2、修改數據庫配置文件

application.properties文件中聲明postgresql的配置信息:

spring.sql.init.platform=postgresql#spring.datasource.platform=postgresql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:postgresql://127.0.0.1:5432/nacos?currentSchema=public&useUnicode=true&tcpKeepAlive=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&reWriteBatchedInserts=true&ApplicationName=nacos_java
db.user.0=nacos
db.password.0=nacos
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
db.pool.config.driverClassName=org.postgresql.Driver# 如果是 oracle 則需要改為 SELECT * FROM dual 
# db.pool.config.connectionTestQuery=SELECT 1

6.3、導入Postgresql的數據庫腳本文件

導入nacos-postgresql的腳本文件,腳本文件在nacos-postgresql-datasource-plugin-ext/src/main/resources/schema文件夾下面.

上面操作完成后,啟動Nacos即可。

七、其他數據庫插件開發

可參考nacos-postgresql-datasource-plugin-ext工程,新創建Maven項目,實現AbstractDatabaseDialect類,重寫相關的分頁操作邏輯與方法,并創建相應的mapper實現。

八、參考資料

https://github.com/nacos-group/nacos-plugin/tree/develop/nacos-datasource-plugin-ext

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

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

相關文章

機器學習第三篇 模型評估(交叉驗證)

Sklearn:可以做數據預處理、分類、回歸、聚類&#xff0c;不能做神經網絡。原始的工具包文檔&#xff1a;scikit-learn: machine learning in Python — scikit-learn 1.6.1 documentation數據集:使用的是MNIST手寫數字識別技術&#xff0c;大小為70000&#xff0c;數據類型為7…

如何在 IntelliJ IDEA 中編寫 Speak 程序

在當今數字化時代&#xff0c;語音交互技術越來越受到開發者的關注。如果你想在 IntelliJ IDEA&#xff08;一個強大的集成開發環境&#xff09;中編寫一個語音交互&#xff08;Speak&#xff09;程序&#xff0c;那么本文將為你提供詳細的步驟和指南。 一、環境準備 在開始編…

AI大模型學習十四、白嫖騰訊Cloud Studio AI環境 通過Ollama+Dify+DeepSeek構建生成式 AI 應用-接入DeepSeek大模型

一、說明 需要閱讀 AI大模型學習十三、白嫖騰訊Cloud Studio AI環境 通過OllamaDifyDeepSeek構建生成式 AI 應用-安裝-CSDN博客https://blog.csdn.net/jiangkp/article/details/147580344?spm1011.2415.3001.5331 我們今天干點啥呢&#xff0c;跟著官網走 模型類型 在 Dify…

《Astro 3.0島嶼架構讓內容網站“脫胎換骨”》

內容優先的網站越來越成為主流。無論是新聞資訊、知識博客&#xff0c;還是電商產品展示&#xff0c;用戶都希望能快速獲取所需內容&#xff0c;這對網站的性能和體驗提出了極高要求。而Astro 3.0的島嶼架構&#xff0c;就像是為內容優先網站量身定制的一把神奇鑰匙&#xff0c…

在 UniApp 中實現 App 與 H5 頁面的跳轉及通信

在移動應用開發中&#xff0c;內嵌 H5 頁面或與外部網頁交互是常見需求。UniApp 作為跨平臺框架&#xff0c;提供了靈活的方式實現 App 與 H5 的跳轉和雙向通信。本文將詳細講解實現方法&#xff0c;并提供可直接復用的代碼示例。 文章目錄 一、 App 內嵌 H5 頁面&#xff08;使…

springboot 實現敏感信息脫敏

記錄于2025年4月28號晚上--梧州少帥 1. 定義枚舉類&#xff1a; public enum DesensitizeType {NAME, EMAIL } 2. 創建自定義注解&#xff1a; 用于標記需要脫敏的字段及其類型。 Retention(RetentionPolicy.RUNTIME) JacksonAnnotationsInside JsonSerialize(using Desen…

SNMP協議之詳解(Detailed Explanation of SNMP Protocol)

SNMP協議之詳解 一、前言 SNMP&#xff0c;被形象地喻為網絡世界大的工具箱&#xff0c;使他們能的“智慧守護者”&#xff0c;它為網絡管理員裝備了一套功能強夠實現對網絡設備狀態的實時監控、性能數據的全面收集、遠程配置的靈活管理以及故障事件的即時響應。借助SNMP&…

SpeedyAutoLoot

SpeedyAutoLoot自動拾取插件 SpeedyAutoLoot.lua local AutoLoot CreateFrame(Frame)SpeedyAutoLootDB SpeedyAutoLootDB or {} SpeedyAutoLootDB.global SpeedyAutoLootDB.global or {}local BACKPACK_CONTAINER BACKPACK_CONTAINER local LOOT_SLOT_CURRENCY LOOT_SLOT…

xe-upload上傳文件插件

1.xe-upload地址&#xff1a;文件選擇、文件上傳組件&#xff08;圖片&#xff0c;視頻&#xff0c;文件等&#xff09; - DCloud 插件市場 2.由于開發app要用到上傳文件組件&#xff0c;uni.chooseFile在app上不兼容&#xff0c;所以找到了xe-upload&#xff0c;兼容性很強&a…

Golang|外觀模式和具體邏輯

最終返回的是Document的切片&#xff0c;然后取得Bytes自己再去做反序列化拿到文檔的各種詳細信息。 外觀模式是一種結構型設計模式&#xff0c;它的目的是為復雜的子系統提供一個統一的高層接口&#xff0c;讓外部調用者&#xff08;客戶端&#xff09;可以更簡單地使用子系統…

2025年3月AGI技術月評|技術突破重構數字世界底層邏輯

〔更多精彩AI內容&#xff0c;盡在 「魔方AI空間」 &#xff0c;引領AIGC科技時代〕 本文作者&#xff1a;貓先生 ——當「無限照片」遇上「可控試穿」&#xff0c;我們正在見證怎樣的智能革命&#xff1f; 被低估的進化&#xff1a;開源力量改寫游戲規則 當巨頭們在AGI賽道…

可解釋人工智能(XAI):讓機器決策透明化

在人工智能&#xff08;AI&#xff09;技術飛速發展的今天&#xff0c;AI 系統已經廣泛應用于金融、醫療、交通等多個關鍵領域。然而&#xff0c;隨著 AI 系統的復雜性不斷增加&#xff0c;尤其是深度學習模型的廣泛應用&#xff0c;AI 的“黑箱”問題逐漸凸顯。AI 系統的決策過…

【Go語言】ORM(對象關系映射)庫

github.com/jinzhu/gorm 是 Go 語言中一個非常流行的 ORM&#xff08;對象關系映射&#xff09;庫&#xff0c;用于簡化與關系型數據庫的交互。以下是關于它的關鍵信息&#xff1a; 核心特點 全功能 ORM 支持主流數據庫&#xff1a;MySQL、PostgreSQL、SQLite、SQL Server 等。…

大數據企業實驗室管理的痛點 質檢LIMS系統在大數據企業的應用

在數字化轉型浪潮中&#xff0c;大數據企業正面臨海量數據管理與質量控制的雙重挑戰。實驗室作為數據生產的核心環節&#xff0c;其檢測流程的規范化、數據處理的智能化直接關系到企業數據資產的可靠性。質檢LIMS&#xff08;實驗室信息管理系統&#xff09;通過整合實驗室資源…

在Arduino U8g2庫中顯示中文的方法

U8g2庫支持中文顯示&#xff0c;但需要手動添加中文字體或使用內置的有限中文字符。以下是具體實現方法&#xff1a; 方法一 使用U8g2內置的中文字體&#xff08;不推薦&#xff09; 缺點&#xff1a;內置字體支持的漢字較少&#xff0c;可能無法顯示所有需要的字符。不推薦。…

自動駕駛分級

一、美國 SAE J3016 Taxonomy and Definitions for Terms Related to Driving Automation Systems for On-Road Motor Vehicles(2021) 1、駕駛自動化級別&#xff08;Levels of Driving Automation&#xff09; 共分為 6 個級別&#xff0c;從 無自動化&#xff08;0&#…

工業園區工廠企業數字IP廣播應急呼叫對講系統:數字IP廣播極大提升工廠企業管理效率與應急響應效能

工業園區工廠企業數字IP廣播應急呼叫對講系統:數字IP廣播極大提升工廠企業管理效率與應急響應效能 北京海特偉業科技有限公司任洪卓發布于2025年4月28日 在數字化轉型浪潮下&#xff0c;IP應急廣播呼叫對講廣播系統憑借其網絡化、智能化、融合化、多元化等優勢&#xff0c;已…

DNS主從同步及解析

DNS 域名解析原理 域名系統的層次結構 &#xff1a;DNS 采用分層樹狀結構&#xff0c;頂級域名&#xff08;如.com、.org、.net 等&#xff09;位于頂層&#xff0c;下面是二級域名、三級域名等。例如&#xff0c;在域名 “www.example.com” 中&#xff0c;“com” 是頂級域名…

再看 BBR 到 BBRv3 的公平性改進

從看一篇論文開始&#xff1a;Performance Evaluation of TCP BBRv3 in Networks with Multiple Round Trip Times&#xff0c;結論比較悲觀&#xff1a; 雖然 BBRv2/3 試圖解決 BBRv1 的公平性問題&#xff0c;但結果依舊不夠理想&#xff0c;BBR 的迭代依舊任重而道遠。 BB…

locust壓力測試

安裝 pip install locust驗證是否安裝成功 locust -V使用 網上的教程基本上是前幾年的&#xff0c;locust已經更新了好幾個版本&#xff0c;有點過時了&#xff0c;在此做一個總結 啟動 默認是使用瀏覽器進行設置的 # 使用瀏覽器 locust -f .\main.py其他參數 Usage: locust […