zyskm用夢想丈量人生,用奔跑丈量激情

          導(dǎo)航

          <2011年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          統(tǒng)計(jì)

          公告

          zyskm,zys是鄭勇勝的拼音簡寫,km公里的意思。
          以前曾跑過一段時(shí)間馬拉松,知道了這句名言“用夢想丈量人生,用奔跑丈量激情”,丈量的單位用公里km。

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          基于spring的動(dòng)態(tài)數(shù)據(jù)源

          基于spring的動(dòng)態(tài)數(shù)據(jù)源
          項(xiàng)目過程中遇到這樣一個(gè)需求,系統(tǒng)啟動(dòng)后動(dòng)態(tài)設(shè)置數(shù)據(jù)源,不同用戶登錄系統(tǒng)后訪問的數(shù)據(jù)庫不同。
          好在所有書庫結(jié)構(gòu)一致。
          用spring 的AbstractRoutingDataSource解決了這個(gè)問題。
          原理如圖:

          項(xiàng)目采用的是hibernate,直接在spring.xml設(shè)置sessionFactory的dataSource屬性為動(dòng)態(tài)數(shù)據(jù)源即可。
          因?yàn)轫?xiàng)目所有數(shù)據(jù)庫結(jié)構(gòu)都一致,為了避免每次設(shè)置數(shù)據(jù)源的時(shí)候要改一堆參數(shù),修改了spring AbstractRoutingDataSource類增加了一個(gè)getTargetDataSources方法,獲取當(dāng)前數(shù)據(jù)源詳細(xì)信息,在其基礎(chǔ)上修改數(shù)據(jù)庫名稱、用戶名、密碼即可,不用每次設(shè)置一堆參數(shù)。
          Map<String,ComboPooledDataSource> targetDataSources=dynamicDataSource.getTargetDataSources();
                          
          if(targetDataSources==null){
                              targetDataSources
          =new HashMap<String, ComboPooledDataSource>();
                              targetDataSources.put(
          "baseDataSource", baseDataSource);
                          }

                          targetDataSources.put(dataSourceName, subSystemDataSource);
                          dynamicDataSource.setTargetDataSources(targetDataSources);
                          dynamicDataSource.afterPropertiesSet();
          另外,設(shè)置AbstractRoutingDataSource參數(shù)后要調(diào)用afterPropertiesSet()方法,spring容器才會(huì)進(jìn)行加載操作。

          在動(dòng)態(tài)設(shè)置數(shù)據(jù)源方面,可以通過兩種方式實(shí)現(xiàn):
          1.在action(項(xiàng)目使用struts)中進(jìn)行設(shè)置,可以確保在每個(gè)servlet線程中數(shù)據(jù)源是一致的。
          2.以aop方式,對service方法進(jìn)行攔截,根據(jù)需求設(shè)置不同數(shù)據(jù)源。

          posted on 2011-10-24 17:11 zyskm 閱讀(3586) 評論(2)  編輯  收藏

          評論

          # re: 基于spring的動(dòng)態(tài)數(shù)據(jù)源 2011-10-25 08:22 tbw

          很好的想法   回復(fù)  更多評論   

          # re: 基于spring的動(dòng)態(tài)數(shù)據(jù)源 2012-09-07 15:31 wys

          方案非常不錯(cuò),不知道能不能把相關(guān)代碼共享一下,目前也遇到類似的需求希望能夠幫助解決一下,謝謝了,Q郵箱:471372495@qq.com  回復(fù)  更多評論   


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 扶绥县| 永德县| 遵义县| 泽库县| 绵阳市| 马公市| 黑山县| 会理县| 肃北| 罗城| 娄烦县| 竹山县| 延长县| 新竹县| 和田县| 湾仔区| 黎平县| 卢氏县| 池州市| 西城区| 迁西县| 甘孜县| 岱山县| 正蓝旗| 乌兰县| 安阳市| 高台县| 周口市| 龙江县| 丽江市| 科技| 济南市| 左贡县| 延边| 阜南县| 横峰县| 三穗县| 紫金县| 民丰县| 天水市| 广河县|