在實際的業務場景中,我們經常會遇到需要動態配置資料來源的情況,只需要修改配置,就能增加新的資料來源的接入,而不需要修改程式**,通過動態資料來源技術可以實現這個目標。
具體的**參照 示例專案
通常在用springboot開發資料庫應用時,我們會在配置檔案中配置好資料來源,程式中指定資料來源進行資料庫操作。當需要新增資料來源時,就需要修改程式。通過動態資料來源技術,我們可以做到只修改配置就能實現新資料來源的接入,無需修改**。這樣可以很大的提公升開發效率,提公升系統的靈活性。
yml格式的配置檔案支援list結構,我們可以把需要訪問的資料來源配置到list結構中,每個資料來源指定各自的url、使用者名稱、密碼、查詢語句:
spring::
name
: dynamicdatasource
dynamic-data
:schemas:-
code
: dbsource1
datasource
:url
: jdbc:h2:mem:db1;mode=mysql;db_close_delay=-1;db_close_on_exit=false
username
: sa
password
:query:|
select 'datasource1 data'
-code
: dbsource2
datasource
:url
: jdbc:h2:mem:db2;mode=mysql;db_close_delay=-1;db_close_on_exit=false
username
: sa
password
:query:|
select 'datasource2 data'
我們定義乙個配置類databaseconfig
用於讀取資料源的配置:
@slf4j
@data
@component
@configurationproperties
(prefix =
"dynamic-data"
)public
class
databaseconfig
catch
(exception e)}}
@data
@noargsconstructor
public
static
class
dbschema
}
其中的dbschema
類對應了資料來源的各項配置,包括url、使用者名稱、密碼、查詢語句,另外還定義了乙個jdbctemplate
,我們可以用每個資料來源自己的jdbctemplate去訪問本資料來源的資料。
在init
方法中初始化jdbctemplate
。資料庫連線池採用hikaricp,這也是springboot預設使用的資料庫連線池。配置檔案中所有的資料庫連線配置都生成乙個對應的dbschema
物件,放到配置類的schemas這個list中。
通過這種方式,我們還可以實現配置檔案中資料庫密碼的加密。配置檔案中的資料庫密碼是加密後的密碼,可以在init方法中,對current.getdatasource().getpassword()
解密。這樣能夠提公升系統的安全性,防止資料庫密碼通過配置檔案洩漏。
當資料庫連線池完成初始化後,讀取資料就變的很簡單,我們只需要遍歷配置類中的schemas成員,針對每個schema操作jdbctemplate
就可以。
public
class
implements
commandlinerunner);
}public
static
void
main
(string[
] args)
}後續如果要新增資料來源,只需要在配置檔案中的schemas下面新增資料來源定義即可。
spring 動態資料來源
spring 可以設定動態資料來源,這樣可以對程式來透明的支援切換操作不同的資料庫。這篇文章寫得非常不錯。測試通過,並準備在專案中使用這個方法。還有幾個問題希望大家給點意見 首先說一下我的需求 資料庫結構都是一樣,但具體有多少個資料庫不確定 視具體使用者而定 使用者操作那個資料庫要根據登入的時候進行...
spring 配置資料來源
spring配置資料來源包括 1.由jdbc驅動程式定義的資料來源 2.由jndi查詢的資料來源 3.連線池的資料來源 我們這裡介紹資料來源連線池的配置 xmlns xsi xsi schemalocation spring beans 2.5.xsd 這四個屬性是必須配置的。同時還有另外的一些配置...
Spring配置資料來源
spring 在第三方依賴包中包含了兩個資料來源的實現類包,其一是apache 的dbcp 其二是c3p0 可以在spring 配置檔案中利用這兩者中任何乙個配置資料來源。第一種配置 apache 的dbcp 需要匯入兩個包 commons pool.jar 和commons dbcp.jar 配置...