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

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

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

    隨筆-204  評(píng)論-90  文章-8  trackbacks-0
    摘自springside論壇

    一、
    經(jīng)過(guò)N多試驗(yàn),終于自己把這個(gè)問(wèn)題搞定了。

    網(wǎng)上關(guān)于C3P0在spring中的配置,幾乎沒(méi)有完全正確的(至少我還沒(méi)發(fā)現(xiàn))。查了c3p0的文檔,又試驗(yàn)過(guò)N次。得出如下配置是正確的:


    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"? ?destroy-method="close">
    ? ?? ?? ?<property name="driverClass"><value>${jdbc.driverClassName}</value></property>
    ? ?? ?? ?<property name="jdbcUrl"><value>${jdbc.url}</value></property>? ?? ?? ?? ?? ?
    ? ?? ?? ?<property name="user"><value>${jdbc.username}</value></property>
    ? ?? ?? ?<property name="password"><value>${jdbc.password}</value></property>
    ? ?? ?? ?
    ? ?? ?? ?<property name="minPoolSize"><value>1</value></property>
    ? ?? ?? ?<property name="maxPoolSize"><value>20</value></property>
    ? ?? ?? ?<property name="maxIdleTime"><value>1800</value></property>
    ? ?? ?? ?<property name="acquireIncrement"><value>2</value></property>
    ? ?? ?? ?<property name="maxStatements"><value>0</value></property>
    ? ?? ?? ?<property name="initialPoolSize"><value>2</value></property>
    ? ?? ?? ?<property name="idleConnectionTestPeriod"><value>1800</value></property>
    ? ?? ?? ?<property name="acquireRetryAttempts"><value>30</value></property>
    ? ?? ?? ?<property name="breakAfterAcquireFailure"><value>true</value></property>
    ? ?? ?? ?<property name="testConnectionOnCheckout"><value>false</value></property>
    ? ?? ?? ?
    ? ?? ?? ?<!--
    ? ?? ?? ?? ?<property name="properties">
    ? ?? ?? ? <props>? ?? ?? ?? ???
    ? ?? ?? ?? ???<prop key="c3p0.minPoolSize">1</prop>
    ? ?? ?? ?? ???<prop key="c3p0.maxPoolSize">10</prop>
    ? ?? ?? ?? ???<prop key="c3p0.maxIdleTime">1800</prop>? ?? ?? ?? ???
    ? ?? ?? ?? ???<prop key="c3p0.acquireIncrement">2</prop>
    ? ?? ?? ?? ???<prop key="c3p0.maxStatements">0</prop>
    ? ?? ?? ?? ?? ?? ???<prop key="c3p0.initialPoolSize">2</prop>
    ? ?? ?? ?? ???<prop key="c3p0.idleConnectionTestPeriod">1800</prop>
    ? ?? ?? ?? ???<prop key="c3p0.acquireRetryAttempts">30</prop>
    ? ?? ?? ?? ???<prop key="c3p0.breakAfterAcquireFailure">true</prop>
    ? ?? ?? ?? ???<prop key="c3p0.testConnectionOnCheckout">true</prop>
    ? ?? ?? ?? ???<prop key="user">root</prop>
    ? ?? ?? ?? ???<prop key="password">999999</prop>
    ? ?? ?? ?? ???
    ? ?? ?? ? </props>
    ? ?? ?? ?</property>
    ? ?? ???-->? ?? ?
    </bean>

    <!-- Hibernate SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    ??<property name="dataSource" ref="dataSource"/>
    ??<property name="mappingDirectoryLocations">
    ? ?? ?<list>
    ? ?<value>classpath:/com/licaionline/domain/</value>
    ? ?? ?</list>
    ??</property>
    ??<property name="hibernateProperties">
    ? ?<props>
    ? ? <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    ? ???<prop key="hibernate.show_sql">true</prop>
    ? ? <prop key="hibernate.generate_statistics">true</prop>
    ? ?? ?? ?? ?? ? <prop key="hibernate.connection.release_mode">auto</prop>? ?? ?? ?? ?? ?? ?? ?
    ? ?? ?? ?? ?? ? <prop key="hibernate.autoReconnect">true</prop>
    ? ?? ?? ?? ?? ? <prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
    ? ?? ?? ?? ?? ? <!--
    ? ? <prop key="hibernate.useUnicode"></prop>
    ? ? <prop key="hibernate.characterEncoding"></prop>
    ? ? <prop key="hibernate.default-lazy-init"></prop>
    ? ?? ?? ?? ?? ? <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>? ???
    ? ? -->
    ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???
    ? ?? ?? ?? ?? ? <!--
    ? ?? ?? ?? ?? ? <prop key="hibernate.c3p0.acquire_increment">2</prop>
    ? ?? ?? ?? ?? ? <prop key="hibernate.c3p0.idle_test_period">1800</prop>
    ? ?? ?? ?? ?? ? <prop key="hibernate.c3p0.timeout">1800</prop>
    ? ?? ?? ?? ?? ? <prop key="hibernate.c3p0.max_size">30</prop>
    ? ?? ?? ?? ?? ? <prop key="hibernate.c3p0.min_size">2</prop>
    ? ?? ?? ?? ?? ? <prop key="hibernate.c3p0.max_statements">50</prop>
    ? ? -->? ?? ?? ?
    ? ?</props>
    ??</property>




    注意:注釋掉的那些,都是錯(cuò)誤的。網(wǎng)上流行的,基本上跟注釋掉的那些差不多。配錯(cuò)了,并無(wú)異常,還是能正常使用。但是所作的配置不起作用。


    二、
    起作用的,是datasource里面的這一句:
    <property name="maxIdleTime"><value>1800</value></property>

    這兒設(shè)置成每隔1800秒就掃描一次,檢查一下空閑的鏈接。所以,用戶基本上不會(huì)得到空閑的鏈接了。

    如果再不放心,
    <property name="testConnectionOnCheckout"><value>false</value></property>
    這兒設(shè)置成true。每次連接之前,都要測(cè)一下。但是這樣會(huì)影響效率。


    三、

    解決的方法有3種:

    增加wait_timeout的時(shí)間。
    減少Connection pools中connection的lifetime。
    測(cè)試Connection pools中connection的有效性。
    當(dāng)然最好的辦法是同時(shí)綜合使用上述3種方法,下面就DBCP和C3P0分別做一說(shuō)明,假設(shè)wait_timeout為默認(rèn)的8小時(shí)

    DBCP增加以下配置信息:

    //set to 'SELECT 1'? ?
    validati? ?
    //set to 'true'? ?
    testWhileIdle = "true"? ???
    //some positive integer? ?
    timeBetweenEvictionRunsMillis = 3600000? ?
    //set to something smaller than 'wait_timeout'? ?
    minEvictableIdleTimeMillis = 18000000? ?
    //if you don't mind a hit for every getConnection(), set to "true"? ?
    test? ?

    C3P0增加以下配置信息:

    //set to 'SELECT 1'? ?? ?
    preferredTestQuery = 'SELECT 1'? ???
    //set to something much less than wait_timeout, prevents connections from going stale? ?
    idleConnectionTestPeriod = 18000? ?? ?
    //set to something slightly less than wait_timeout, preventing 'stale' connections from being handed out? ?
    maxIdleTime = 25000? ???
    //if you can take the performance 'hit', set to "true"? ?
    testConnectionOnCheckout = true? ???

    更多的配置信息大家可以查看C3P0文檔,Connector/J文檔,以及DBCP的文檔。

    posted on 2007-01-10 15:33 一凡 閱讀(4117) 評(píng)論(10)  編輯  收藏 所屬分類: JAVA FRAMEWORK

    評(píng)論:
    # re: 每日訪問(wèn)數(shù)據(jù)庫(kù)失敗問(wèn)題 2007-03-18 15:18 | 流浪汗
    我這個(gè)問(wèn)題

    同感,當(dāng)去掉<property name="properties">
    時(shí)正確

    否則第一次連接時(shí)出錯(cuò)

    org.hibernate.exception.JDBCConnectionException: could not execute query

    然后找到你的文章,收藏了.

    你總結(jié)的很好

    我的環(huán)境是
    spring 2.0
    hibernate 3.1.2
    c3p0-0.9.0.4  回復(fù)  更多評(píng)論
      
    # re: 每日訪問(wèn)數(shù)據(jù)庫(kù)失敗問(wèn)題 2007-10-19 10:42 | mashiguang
    c3p0的最大空閑時(shí)間為什么不起作用呢.

    有時(shí)間的話幫我看一下這個(gè)貼子,http://www.javaeye.com/topic/133254
    謝謝.  回復(fù)  更多評(píng)論
      
    # re: 每日訪問(wèn)數(shù)據(jù)庫(kù)失敗問(wèn)題 2007-10-19 10:50 | 一凡
    配置文件里加上這句
    <property name="maxIdleTime"><value>1800</value></property>  回復(fù)  更多評(píng)論
      
    # re: 每日訪問(wèn)數(shù)據(jù)庫(kù)失敗問(wèn)題 2007-10-19 10:51 | 一凡
    不要在程序里設(shè)置,讓它自己初始化就好  回復(fù)  更多評(píng)論
      
    # re: 每日訪問(wèn)數(shù)據(jù)庫(kù)失敗問(wèn)題 2007-10-19 10:54 | mashiguang
    我沒(méi)有用spring,
    ComboPooledDataSource dataSource=new ComboPooledDataSource();
    dataSource.setMaxIdleTime(9);
    這樣設(shè)置不是一樣的嗎??  回復(fù)  更多評(píng)論
      
    # re: 每日訪問(wèn)數(shù)據(jù)庫(kù)失敗問(wèn)題 2007-10-19 11:06 | 一凡
    按理說(shuō)應(yīng)該沒(méi)問(wèn)題,連接池這東西說(shuō)不好,我遇到過(guò)程序?qū)懖恍校谂渲莆募锞蜎](méi)問(wèn)題  回復(fù)  更多評(píng)論
      
    # re: 每日訪問(wèn)數(shù)據(jù)庫(kù)失敗問(wèn)題 2007-10-19 11:11 | mashiguang
    好的,我試一下,謝謝你.  回復(fù)  更多評(píng)論
      
    # re: 每日訪問(wèn)數(shù)據(jù)庫(kù)失敗問(wèn)題[未登錄](méi) 2008-05-19 14:02 | alfred
    <prop key="c3p0.idleConnectionTestPeriod">1800</prop>
    <prop key="c3p0.maxIdleTime">1800</prop>
    這兩都都是檢查空閑的,maxidelteime檢查到空閑會(huì)丟掉。
    idleConnectionTestPeriod 有什么作用呢?  回復(fù)  更多評(píng)論
      
    # re: 每日訪問(wèn)數(shù)據(jù)庫(kù)失敗問(wèn)題 2010-06-05 21:03 | moka
    <!--每30秒檢查所有連接池中的空閑連接。Default: 0 -->
    <property name="idleConnectionTestPeriod">30</property>
    指每個(gè)連接sleep time只要一到${idleConnectionTestPeriod}秒就將sleep time從頭開(kāi)始計(jì)時(shí)

    <!--最大空閑時(shí)間,60秒內(nèi)未使用則連接被丟棄。若為0則永不丟棄。Default: 0 -->
    <property name="maxIdleTime">60</property>
    指每個(gè)連接sleep time只要一到${maxIdleTime}秒就將該線程殺掉(kill)

    只要連接池里的連接一使用,sleep time就會(huì)從頭開(kāi)始計(jì)時(shí)  回復(fù)  更多評(píng)論
      
    # re: 每日訪問(wèn)數(shù)據(jù)庫(kù)失敗問(wèn)題 2011-09-30 22:44 | showzh
    隨便問(wèn)一句,為什么hibernate.c3p0.timeout沒(méi)起作用?  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 亚洲国产成人精品无码区在线秒播| 国产免费看插插插视频| 亚洲国产精品va在线播放| 成人免费视频一区二区| 亚洲国产精品日韩专区AV| 无码日韩人妻AV一区免费l| 亚洲综合无码精品一区二区三区| 一区二区三区免费在线视频| 亚洲精品专区在线观看| 男女一边摸一边做爽的免费视频| 亚洲国产成人高清在线观看| 久久久久久久久久国产精品免费| 午夜亚洲国产理论秋霞| 69av免费视频| 亚洲欧美黑人猛交群| 亚洲?v无码国产在丝袜线观看| 三级黄色在线免费观看| 亚洲精品视频久久| 免费观看a级毛片| 一级黄色免费网站| 亚洲国产精品线在线观看| 一级女人18毛片免费| 亚洲6080yy久久无码产自国产| 亚洲视频人成在线播放| 免费播放一区二区三区| 亚洲Av永久无码精品一区二区| 久久精品国产精品亚洲下载| 久久精品电影免费动漫| 亚洲欧美不卡高清在线| 精品亚洲一区二区三区在线播放 | 无码日韩人妻AV一区免费l| 亚洲中文字幕无码永久在线| 在线看片v免费观看视频777| 黄色网址大全免费| 91在线亚洲精品专区| 四虎影永久在线高清免费| a级毛片黄免费a级毛片| 国产亚洲中文日本不卡二区| 国产亚洲一区区二区在线| 久久久久久久免费视频| 国产精品偷伦视频免费观看了|