云自無心水自閑

          天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
          posts - 288, comments - 524, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
          iBatis自己帶了一個simple的數據庫連接池,基本的功能都有。但是在處理部分數據庫(比如mysql)的連接空閑時間太長(mysql是8小時)自動超時的時候,就比不上象c3p0這樣的連接池軟件了(c3p0能自動處理數據庫連接被關閉的情況)。
          我目前采用的方法是iBatis本身提供的一種算得上是取巧的辦法,基本思想就是每隔一段時間往數據庫發一條查詢語句,這樣使得數據庫空閑時間不會太長,而使得其自動關閉。
          方法是在SqlMapConfig.xml的dataSource進行如下配置:
          <dataSource type="SIMPLE">
              <property name="JDBC.Driver" value="${jdbc.driverClassName}"/>
              <property name="JDBC.ConnectionURL" value="${jdbc.url}"/>
              <property name="JDBC.Username" value="${jdbc.username}"/>
              <property name="JDBC.Password" value="${jdbc.password}"/>
              <property name="Pool.PingEnabled" value="true"/>
              <property name="Pool.PingQuery" value="select 1"/>
              <property name="Pool.PingConnectionsOlderThan" value="0"/>
              <property name="Pool.PingConnectionsNotUsedFor" value="3600000"/>
          </dataSource>
          開始的3行是關于數據庫連接信息的,不需要說明了。
          Pool.PingEnabled:是用于設置開啟是否允許檢測連接狀態
          Pool.PingQuery:是用于檢測連接的查詢語名,當然是越簡單越好
          Pool.PingConnectionOlderThan:對持續連接時間超過設定值(毫秒)的連接進行檢測,我將其設置為0(不進行此項檢測),否則,iBatis在超過這個時間后,執行每個sql以前檢測連接,對于性能可能會有一定的影響。
          Pool.PingConnectionsNotUsedFor:對空閑超過設定值(毫秒)的連接進行檢測,我設置為1小時(mysql缺省的關閉時間是8小時)

          當然,還有一個辦法是使用c3p0這樣的連接池
          但是需要自己寫一部分代碼,實現以下接口:
          public interface DataSourceFactory {
          public void initialize(Map map);
          public DataSource getDataSource();
          }



          評論

          # re: iBatis使用mysql,數據庫超時自動關閉問題的解決  回復  更多評論   

          2008-05-13 15:04 by ci
          ..............
          主站蜘蛛池模板: 贺兰县| 南澳县| 观塘区| 永昌县| 宜都市| 亚东县| 沽源县| 连江县| 琼结县| 海门市| 诏安县| 鞍山市| 漳州市| 河西区| 克什克腾旗| 丹巴县| 乡城县| 林州市| 张家港市| 亳州市| 垣曲县| 元氏县| 宁明县| 岳西县| 通辽市| 阿坝县| 新巴尔虎右旗| 文化| 余庆县| 武乡县| 柘城县| 莱西市| 营山县| 嘉峪关市| 永安市| 高唐县| 新平| 新和县| 永年县| 中超| 富平县|