python+django+Nacos實現配置動態更新-集中管理配置(實現mysql配置動態讀取及動態更新)

一、docker-compose.yml 部署nacos服務

version: "3"
services:mysql:container_name: mysql# 5.7image: mysql:5.7environment:# mysql root用戶密碼MYSQL_ROOT_PASSWORD: rootTZ: Asia/Shanghai# 初始化數據庫(后續的初始化sql會在這個庫執行)MYSQL_DATABASE: nacos_config# 初始化用戶(不能是root 會報錯, 后續需要給新用戶賦予權限)MYSQL_USER: nacosMYSQL_PASSWORD: nacoscommand:--default-authentication-plugin=mysql_native_password--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=true--lower_case_table_names=1--max_allowed_packet=128M;volumes:# mysql的數據文件- /soft/mysql/data:/var/lib/mysql# mysql配置文件- /sof/mysql/conf:/etc/mysql/conf.dports:- "8081:3306"nacos3:hostname: nacos3image: nacos/nacos-server:2.0.3container_name: nacos3volumes:#- ./nacos/plugins/mysql/:/home/nacos/plugins/mysql/- /soft/nacos/logs/:/home/nacos/logs- /soft/nacos/application.properties:/home/nacos/init.d/application.propertiesenvironment:                      # 設置環境變量,相當于docker run命令中的-e- JVM_XMS=215m- JVM_XMX=215m- JVM_XMN=215m- MODE=standalone               #單機模式- SPRING_DATASOURCE_PLATFORM=mysql- MYSQL_SERVICE_HOST=120.26.3.89- MYSQL_SERVICE_PORT=8081- MYSQL_SERVICE_USER=nacos- MYSQL_SERVICE_PASSWORD=nacos- MYSQL_SERVICE_DB_NAME=nacos_configports:- "8848:8848"#- "7848:7848"- "9848:9848"- "9849:9849"#env_file:#  - /soft/nacos/nacos-hostname.envrestart: alwaysdepends_on:- mysql

二、啟動docker

#cd 到docker-compose.yml文件所在目錄 
#執行
docker-compose up -d

#訪問 Nacos平臺
http://ip地址:8848/nacos/

#新建命名空間
public(默認有的),dev(開發環境),test(測試環境)

nacos啟動后會生成相應的表

三、python?django settings.py文件 中mysql 配置動態讀取

#python Django 集成nacos
pip install nacos-sdk-python
###################################settings.py#################################### Nacos 配置
NACOS_SERVER = "ip:8848"  # Nacos 服務器地址 ip 換成Nacos對應的IP地址
NACOS_NAMESPACE = "dev"  # Nacos 命名空間
NACOS_GROUP = "MICRO_GROUP"  # Nacos 分組
NACOS_DATA_ID = "operation_config_dev"  # Nacos 配置 ID# 初始化 Nacos 客戶端
nacos_client = NacosClient(NACOS_SERVER, namespace=NACOS_NAMESPACE)# 從 Nacos 獲取 MySQL 配置
mysql_config = nacos_client.get_config(NACOS_DATA_ID, NACOS_GROUP)
mysql_config = eval(mysql_config)  # 將 JSON 字符串轉換為字典# 配置 MySQL 數據庫
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': mysql_config.get("DATABASE_NAME"),'USER': mysql_config.get("DATABASE_USER"),'PASSWORD': mysql_config.get("DATABASE_PASSWORD"),'HOST': mysql_config.get("DATABASE_HOST"),'PORT': mysql_config.get("DATABASE_PORT", "8081"),'OPTIONS': {'charset': 'utf8mb4',  # 支持更廣泛的字符集},}
}print(f"更新前 Databases: {DATABASES}")
def update_mysql_config(config):"""動態更新 MySQL 配置"""global DATABASESprint("收到 Nacos 配置更新通知")print(f"收到更新后 config: {config}")# 使用 json.loads 解析 JSON 字符串mysql_config = json.loads(config['content'])print(f"更新后 Databases: {mysql_config}")DATABASES['default'].update({'NAME': mysql_config.get("DATABASE_NAME"),'USER': mysql_config.get("DATABASE_USER"),'PASSWORD': mysql_config.get("DATABASE_PASSWORD"),'HOST': mysql_config.get("DATABASE_HOST"),'PORT': mysql_config.get("DATABASE_PORT", "3306"),})# 監聽 Nacos 配置變化
nacos_client.add_config_watcher(NACOS_DATA_ID, NACOS_GROUP, update_mysql_config)

?四、在Nacos上配置Mysql連接配置

{"DATABASE_NAME": "micro_biz_log","DATABASE_USER": "root","DATABASE_PASSWORD": "root","DATABASE_HOST": "xxx.xxx.xxx.xxx", #換成自己的Ip地址"DATABASE_PORT": "8081"  #mysql服務的端口
} 

五、啟動django項目 (需要支持WebSocket或其他異步通信,使用daphne啟動)

#安裝Daphne
pip install daphne#終端輸入
daphne operation.asgi:application

六、驗證查看控制臺輸出

#將nacos中配置  "DATABASE_PORT": "8082" 端口修改成 8082

七、頁面接口驗證

# 修改前 mysql端口 8081 接口能正常訪問

# 修改后 mysql端口 8082 接口無法正常訪問

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

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

相關文章

深度學習項目--基于LSTM的火災預測研究(pytorch實現)

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 前言 LSTM模型一直是一個很經典的模型,這個模型當然也很復雜,一般需要先學習RNN、GRU模型之后再學,GRU、LSTM的模型講解將…

基于 WEB 開發的汽車養護系統設計與實現

標題:基于 WEB 開發的汽車養護系統設計與實現 內容:1.摘要 本文介紹了基于 WEB 開發的汽車養護系統的設計與實現。文章首先闡述了系統的背景和目的,即隨著汽車保有量的增加,汽車養護需求日益增長,傳統的汽車養護方式已經無法滿足人們的需求&…

GitLab集成Jira

GitLab與Jira集成的兩種方式 GitLab 提供了兩種 Jira 集成,即Jira議題集成和Jira開發面板集成,可以配置一個或者兩個都配置。 具體集成步驟可以參考官方文檔Jira 議題集成(極狐GitLab文檔)和Jira 開發面板集成(極狐G…

【爬蟲】某某查cookie逆向

代碼僅供技術人員進行學習和研究使用,請勿將其用于非法用途或以任何方式竊取第三方數據。使用該代碼產生的所有風險均由用戶自行承擔,作者不對用戶因使用該代碼而造成的任何損失或損害承擔任何責任。 加密參數 加密參數主要是cookie,其中只有…

A5.Springboot-LLama3.2服務自動化構建(二)——Jenkins流水線構建配置初始化設置

下面我們接著上一篇文章《A4.Springboot-LLama3.2服務自動化構建(一)——構建docker鏡像配置》繼續往下分析,在自動化流水線構建過程當中的相關初始化設置和腳本編寫。 一、首先需要先安裝Jenkins 主部分請參考我前面寫的一篇文章《Jenkins持續集成與交付安裝配置》 二、…

如何設置HTTPS站點防御?

設置HTTPS站點防御涉及到多個層面的安全措施,包括但不限于配置Web服務器、應用安全頭信息、使用內容安全策略(CSP)、啟用HSTS和OCSP Stapling等。下面是一些關鍵的步驟來增強HTTPS網站的安全性: 1. 使用強加密協議和密鑰交換算法…

[Java]類和對象

1. 什么是類? 類(Class)是藍圖或者模板。它定義了對象的屬性和行為。 類就是一種抽象的模板,你可以通過它創建多個對象。類定義了對象的屬性(變量)和行為(方法)。我們可以把類理解…

win32匯編環境,窗口程序中基礎列表框的應用舉例

;運行效果 ;win32匯編環境,窗口程序中基礎列表框的應用舉例 ;比如在窗口程序中生成列表框,增加子項,刪除某項,取得指定項內容等 ;直接抄進RadAsm可編譯運行。重點部分加備注。 ;以下是ASM文件 ;>>>>>>>>>>>…

【機器學習實戰入門】使用LSTM機器學習預測股票價格

機器學習在股票價格預測中有重要的應用。在這個機器學習項目中,我們將討論如何預測股票的收益。這是一個非常復雜的任務,充滿了不確定性。我們將會把這個項目分成兩部分進行開發: 首先,我們將學習如何使用 LSTM 神經網絡預測股票…

【編程語言】C/C++語言常見標準和規范

C/C 是兩種功能強大且廣泛使用的編程語言。盡管它們沒有像 Java 那樣強制性的命名規則,但為了提高代碼的可讀性和可維護性,遵循一些普遍認同的編程規范和標準仍然是非常重要的。本文將探討 C/C 編程中的一些命名規范及標準,以幫助開發者編寫更…

使用C語言實現棧的插入、刪除和排序操作

棧是一種后進先出(LIFO, Last In First Out)的數據結構,這意味著最后插入的元素最先被刪除。在C語言中,我們可以通過數組或鏈表來實現棧。本文將使用數組來實現一個簡單的棧,并提供插入(push)、刪除(pop)以及排序(這里采用一種簡單的排序方法,例如冒泡排序)的操作示…

08、如何預防SQL注入

目錄 1、分析及其存在哪些危險 2、預防SQL注入 1、分析及其存在哪些危險 原理: SQL 注入是一種常見的網絡攻擊手段,攻擊者通過在用戶輸入中插入惡意的 SQL 語句,利用程序對用戶輸入處理不當的漏洞,使惡意 SQL 語句被數據庫服務器執行。 通常發生在應用程序將用戶輸入直接拼…

【爬蟲】使用 Scrapy 框架爬取豆瓣電影 Top 250 數據的完整教程

前言 在大數據和網絡爬蟲領域,Scrapy 是一個功能強大且廣泛使用的開源爬蟲框架。它能夠幫助我們快速地構建爬蟲項目,并高效地從各種網站中提取數據。在本篇文章中,我將帶大家從零開始使用 Scrapy 框架,構建一個簡單的爬蟲項目&am…

1.11 思維樹(Tree-of-Thoughts, ToT):續寫佳話

思維樹(Tree-of-Thoughts, ToT):續寫佳話 人工智能在推理和決策方面的突破,越來越依賴于模型能夠以更高效、更靈活的方式進行推理。與傳統的順序性推理方法不同,**思維樹(Tree-of-Thoughts,ToT)**提供了一種基于樹狀結構的推理方式,鼓勵模型從多個角度進行探索,并在…

NVIDIA 下 基于Ubuntun20.04下 使用腳本安裝 ros2-foxy 和 使用docker安裝 ros2-foxy

一、前提介紹: 本文主要采用兩種方式在NVIDIA 下基于 Ubuntun20.04安裝 ros2-foxy。 使用環境: NVIDIA 為 Jetson 系列下 Jetson Xavier NX; Ubuntun版本:20.04 二、安裝方法: 1、使用腳本編譯方式: 使…

wx030基于springboot+vue+uniapp的養老院系統小程序

開發語言:Java框架:springbootuniappJDK版本:JDK1.8服務器:tomcat7數據庫:mysql 5.7(一定要5.7版本)數據庫工具:Navicat11開發軟件:eclipse/myeclipse/ideaMaven包&#…

【人工智能】Python中的自動化機器學習(AutoML):如何使用TPOT優化模型選擇

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 隨著機器學習在各行業的廣泛應用,模型選擇和優化成為了數據科學家面臨的主要挑戰之一。自動化機器學習&am…

計算機網絡常見協議

目錄 OSPF(Open Shortest Path First) NAT(Network Address Translation) ICMP (Internet Control Message Protocol) HTTPS(SSL/TLS加密) HTTPS協議 1. 對稱加密 2. 非對稱加密 3. 證書驗證 4. 回顧https協議傳輸流程 HTTP TCP UDP 1. TCP&a…

1.7 ChatGPT:引領AI對話革命的致勝之道

ChatGPT:引領AI對話革命的致勝之道 隨著人工智能(AI)技術的迅猛發展,特別是在自然語言處理(NLP)領域,OpenAI 的 ChatGPT 已經成為了舉世矚目的技術突破。從普通的自動化客服到深入的創作與協作,ChatGPT 通過其卓越的語言理解和生成能力,改變了人們與計算機交互的方式…

靜態綜合路由實驗

實驗拓撲 實驗要求 1.除R5的環回地址外,整個其他所有網段基于192.168.1.0/24進行合理的IP地址劃分 2.R1-R4每個路由器存在兩個環回接口,用于模擬pc網段;地址也在192.168.1.0/24這個網絡范圍內 3.R1-R4上不能直接編寫到達5.5.5.0/24的靜態路由…