<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    The important thing in life is to have a great aim , and the determination

    常用鏈接

    統計

    IT技術鏈接

    保險相關

    友情鏈接

    基金知識

    生活相關

    最新評論

    Spring多數據源解決方案

    在很多大型應用中都會對數據進行切分,并且采用多個數據庫實例進行管理,這樣可以有效提高系統的水平伸縮性。而這樣的方案就會不同于常見的單一數據實例的方案,這就要程序在運行時根據當時的請求及系統狀態來動態的決定將數據存儲在哪個數據庫實例中,以及從哪個數據庫提取數據。

     

    Figure 1 數據分割及多數據庫架構

        通常這種多數據源的邏輯會滲透到業務邏輯中,同時也會給我們使用的數據訪問API諸如Hibernate和iBatis等帶來不便(需要指定多個SessionFactory或SqlMapClient實例來對應多個DataSource)。


    Figure 2 多數據源的選擇邏輯滲透至客戶端

     

        解決方案


    Figure 3 采用Proxy模式來封裝數據源選擇邏輯

        通過采用Proxy模式我們在方案中實現一個虛擬的數據源,并且用它來封裝數據源選擇邏輯,這樣就可以有效地將數據源選擇邏輯從Client中分離出來。

        Client提供選擇所需的上下文(因為這是Client所知道的),由虛擬的DataSource根據Client提供的上下文來實現數據源的選擇。

        Spring2.x的版本中提供了實現這種方式的基本框架,虛擬的DataSource僅需繼承AbstractRoutingDataSource實現determineCurrentLookupKey()在其中封裝數據源的選擇邏輯。

        實例:

    publicclass DynamicDataSource extends AbstractRoutingDataSource {

          static Logger log = Logger.getLogger("DynamicDataSource");

          @Override

          protected Object determineCurrentLookupKey() {

                String userId=(String)DbContextHolder.getContext();

                Integer dataSourceId=getDataSourceIdByUserId(userId);

                return dataSourceId;

          }

    }

        實例中通過UserId來決定數據存放在哪個數據庫中。

        配置文件示例:

    <bean id="dataSource" class="com.bitfone.smartdm.datasource.DynamicDataSource">

                  <property name="targetDataSources">

                     <map key-type="java.lang.Integer">

                        <entry key="0" value-ref="dataSource0"/>

                        <entry key="1" value-ref="dataSource1"/>

                        <entry key="2" value-ref="dataSource2"/>

                     </map>

                  </property>

                  <property name="defaultTargetDataSource" ref="dataSource0"/>

                </bean>

                <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

                    <property name="configLocation" value="classpath:com/bitfone/smartdm/dao/sqlmap/sql-map-config.xml"/>

                    <property name="dataSource" ref="dataSource"/>

               </bean>

                <bean id="UserInfoDAO" class="com.bitfone.smartdm.dao.impl.UserInfoDAO">

     

                      <property name="sqlMapClient" ref="sqlMapClient"/>

                </bean>

    posted on 2010-07-14 17:10 鴻雁 閱讀(130) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 曰批视频免费30分钟成人| 免费萌白酱国产一区二区三区| 一级成人a毛片免费播放| 亚洲精品中文字幕无码蜜桃| 中文字幕在线免费视频| 亚洲精品无码乱码成人| 曰批全过程免费视频在线观看无码| 亚洲最大AV网站在线观看| 永久免费av无码网站yy| 亚洲一区二区成人| 日本人的色道免费网站| jlzzjlzz亚洲jzjzjz| 搡女人真爽免费视频大全| 亚洲av成人一区二区三区在线播放| 国产成人精品免费视频软件| 人人公开免费超级碰碰碰视频| 亚洲人成网亚洲欧洲无码久久| 久久国产免费一区二区三区| 亚洲国产精品yw在线观看| 女人被免费视频网站| 特级做a爰片毛片免费看| 亚洲日韩一页精品发布| 2021在线观看视频精品免费| 亚洲中文无码永久免费| 亚洲av无码成人精品区| 国产成人免费AV在线播放 | 日本阿v免费费视频完整版| 一本天堂ⅴ无码亚洲道久久| 亚洲av无码国产精品色在线看不卡| 国产激情久久久久影院老熟女免费| 久久91亚洲人成电影网站| 5g影院5g天天爽永久免费影院| 亚洲中文字幕一区精品自拍| 亚洲伊人久久综合影院| 99热在线免费播放| 亚洲av永久无码| 亚洲AV人人澡人人爽人人夜夜| 最新免费jlzzjlzz在线播放| 久久久免费观成人影院| 亚洲一区二区三区精品视频| 亚洲欧洲中文日韩久久AV乱码|