日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

spring 多数据源- 原理

發布時間:2025/3/15 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring 多数据源- 原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近公司新開一個項目 需要整合多個數據源 在此記錄一下

1實現原理

利用spring 的AbstractRoutingDataSource? 抽象類 該類相當于數據源的路由中介 能在程序運行的過程中根據key 動態的指定使用數據源。

spring 源碼:

public abstract class AbstractRoutingDataSource extends AbstractDataSource implements InitializingBean {};

1由此可以看出該類主要繼承?AbstractDataSource? 同時AbstractDataSource? 又是javax.sql.DataSource 的子類??

?2從AbstractRoutingDataSource 的getConnection()方法著手

? ? ? ?@Override
public Connection getConnection() throws SQLException {
return determineTargetDataSource().getConnection();
}
@Override
public Connection getConnection(String username, String password) throws SQLException {
return determineTargetDataSource().getConnection(username, password);

}

3 可以看出 主要使用determineTargetDataSource() 這個方法 這時候查看源碼?

????protected DataSource determineTargetDataSource() {
Assert.notNull(this.resolvedDataSources, "DataSource router not initialized");
Object lookupKey = determineCurrentLookupKey();
DataSource dataSource = this.resolvedDataSources.get(lookupKey);
if (dataSource == null && (this.lenientFallback || lookupKey == null)) {
dataSource = this.resolvedDefaultDataSource;
}
if (dataSource == null) {
throw new IllegalStateException("Cannot determine target DataSource for lookup key [" + lookupKey + "]");
}
return dataSource;

}

段源碼的重點在于determineCurrentLookupKey()方法,這是AbstractRoutingDataSource類中的一個抽象方法,而它的返回值是你所要用的數據源dataSource的key值,有了這個key值,resolvedDataSources(這是個map,由配置文件中設置好后存入的)就從中取出對應的DataSource,如果找不到,就用配置默認的數據源。

原理大致如下 這時候可以擴展AbstractRoutingDataSource類,并重寫其中的determineCurrentLookupKey()方法,來實現數據源的切換

下一篇 :?https://blog.csdn.net/lilongwangyamin/article/details/80505176 多數據源 實現

總結

以上是生活随笔為你收集整理的spring 多数据源- 原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。