![](/img/trans.png)
[英]How do I load AWS region specific properties from Spring Boot application properties?
[英]Multi-Region Aurora with write forwarding from Spring Boot Application
我創建了一個基於 MySql 引擎的多區域(例如兩個區域)Aurora 集群。 它具有包含 1 個寫入器實例和 1 個讀取器實例的主集群,以及僅包含讀取器實例的輔助集群。
根據此處的 Aurora 文檔,在讀取器實例的次要區域中執行命令,可以將任何寫入調用轉發到主集群寫入器實例。
SET aurora_replica_read_consistency = 'session';
這工作正常,當我通過mysql客戶端執行相同操作時。 我也可以使用輔助讀取器實例進行寫入操作。
現在,我已經為這兩個區域創建了一個具有單獨實例的應用程序。 與具有寫入器和讀取器的主要 Aurora 集群連接的主要應用程序實例,因此我可以在那里進行讀取和寫入操作。
對於連接到只有讀取器實例的輔助 Aurora 集群的輔助應用程序實例,只有讀取操作有效。
作為解決方案,我在spring啟動應用程序中創建了 writeForward.sql 以僅在輔助集群上的應用程序初始化期間執行和設置aurora_replica_read_consistency 。 為此,我僅在次要區域的參數存儲中添加了以下屬性:
spring.datasource.data=classpath:writeForward.sql
但這在某種程度上不起作用,輔助應用程序仍然無法執行任何寫操作。
我正在尋找有關如何處理此問題的幫助。
再次閱讀 Aurora 文檔后,我意識到僅當為每個 session 設置屬性aurora_replica_read_consistency時,從次區域寫入轉發才有效。
始終為要轉發寫入的任何 session 設置 aurora_replica_read_consistency 參數。 如果不這樣做,Aurora 不會為該 session 啟用寫轉發。
為了實現這一點,應用程序建立的每個數據庫連接都需要執行此命令:
SET aurora_replica_read_consistency = 'session';
對於使用 Hikari DB 連接池的 Spring Boot 應用程序,我使用了以下屬性,它會為與 DB 維護的每個連接自動執行上述 SQL 命令。
spring.datasource.hikari.connection-init-sql= SET aurora_replica_read_consistency = 'session'
關於 Hikari 連接池的詳細信息可以在這里找到,其中提到了connectionInitSql屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.