2012-03-16 17 views
6

मैं वसंत 3.1.0.RELEASE, हाइबरनेट 4.0.1 का उपयोग कर रहा हूं। फाइनल, और MySQL 5.1। पूल किए गए डेटा स्रोत का क्या उपयोग करना चाहिए? मैं वर्तमान में (आवेदन संदर्भ फ़ाइल से स्निपेट) का उपयोग कर रहा ...स्प्रिंग 3.1.0, हाइबरनेट 4.0.1.Final, और MySQL 5.1 के लिए मुझे किस डेटा स्रोत डेटा का उपयोग करना चाहिए?

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName"> 
     <value>com.mysql.jdbc.Driver</value> 
    </property> 
    <property name="url"> 
     <value>jdbc:mysql://localhost:3306/myproj</value> 
    </property> 
    <property name="username"> 
     <value>myproj</value> 
    </property> 
    <property name="password"> 
     <value>password</value> 
    </property> 
</bean> 

लेकिन यह एक एकत्रित डेटा स्रोत, प्रत्येक कॉल पर JDBC कनेक्शन बनाने नहीं है। मैं इस हाइबरनेट config (hibernate.cfg.xml) के लिए ...

<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/myproj</property> 
    <property name="hibernate.connection.username">myproj</property> 
    <property name="hibernate.connection.password">password</property> 
    <property name="hibernate.connection.pool_size">10</property> 
    <property name="show_sql">true</property> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
    ... 

थे, लेकिन वसंत 3.1.0 में एक बग की वजह से, मैं एक hibernate.cfg.xml फ़ाइल का उपयोग नहीं कर सकते हैं कॉन्फ़िगर करते समय मेरी सत्र कारखाने सेम (जो मैं इस तरह करने की कोशिश की - वसंत आवेदन संदर्भ फ़ाइल से झलकी ...)

<bean class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" id="sessionFactory"> 
    <property name="configLocation"> 
     <value>classpath:hibernate.cfg.xml</value> 
    </property> 

उत्तर

5

आप अपाचे DBCP उपयोग कर सकते हैं, जो इस तरह प्रतिस्थापन कुछ में एक बूंद होना चाहिए:

<bean id="dataSource" 
    class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="${jdbc.driverClassName}"/> 
    <property name="url" value="${jdbc.url}"/> 
    <property name="username" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
    <property name="maxActive" value="10"/> 
    <property name="minIdle" value="5"/> 
    <!-- SELECT 1 is a simple query that returns 1 row in MySQL --> 
    <property name="validationQuery" value="SELECT 1"/> 
</bean> 

कुछ चीजें

  • पर आप अधिकतम कनेक्शन कॉन्फ़िगर कर सकते हैं।
  • आप निष्क्रिय कनेक्शन की न्यूनतम संख्या को कॉन्फ़िगर कर सकते हैं।
  • एक क्वेरी जो कनेक्शन को सत्यापित करने के लिए निष्पादित की जाएगी, अभी भी मान्य है।

सत्यापन के दौरान कॉन्फ़िगर करने के लिए और विकल्प मौजूद हैं।

+0

अब org.apache.commons.dbcp2.BasicDataSource –

1

अपाचे डीबीसीपी व्यापक रूप से उपयोग किया जाने वाला पूल है। लेकिन का विकल्प testWhileIdle का उपयोग न करें। सक्षम होने पर, यह पृष्ठभूमि evictor धागा मृत कनेक्शन की जांच करते समय सेवा के सभी नए कनेक्शन ताले। यह किसी भी गैर खिलौना पर्यावरण में अस्वीकार्य है। इसके अलावा, हमें इसके साथ कोई समस्या नहीं है।

आप this SO thread में पूल के बारे में अधिक पढ़ सकते हैं, लेकिन ध्यान रखें कि "सबसे तेज़ पूल" के बारे में सभी आग केवल विशिष्ट लोड के तहत विशिष्ट ट्यूनिंग के साथ समझ में आती हैं।

5

यदि आप कुछ परिपक्व और performant (उदा। अपाचे डीबीसीपी नहीं) का उपयोग करना चाहते हैं, तो BoneCP का उपयोग करें।

विकल्प यहां आप ठीक कर सकते हैं:

<!-- BoneCP configuration --> 
<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close"> 
    <property name="driverClass" value="com.mysql.jdbc.Driver" /> 
    <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1/yourdb" /> 
    <property name="username" value="root"/> 
    <property name="password" value="abcdefgh"/> 
    <property name="idleConnectionTestPeriod" value="60"/> 
    <property name="idleMaxAge" value="240"/> 
    <property name="maxConnectionsPerPartition" value="30"/> 
    <property name="minConnectionsPerPartition" value="10"/> 
    <property name="partitionCount" value="3"/> 
    <property name="acquireIncrement" value="5"/> 
    <property name="statementsCacheSize" value="100"/> 
    <property name="releaseHelperThreads" value="3"/> 
</bean> 

BoneCP forum बहुत सक्रिय है, और कमिटर काफी उत्तरदायी हैं।

एक और जिसे आप देख सकते हैं (लगभग सुनेंगे) C3PO है, हालांकि बोनसीपी बहुत बेहतर प्रदर्शन करता है।

1

असल में यह आपके आवेदन पर निर्भर करता है।

नीचे की स्थिति (here से लिया गया) के होते हैं:

  1. परीक्षण या एक J2EE कंटेनर के बाहर स्टैंडअलोन वातावरण के लिए, का उपयोग DriverManagerDataSource
  2. एक J2EE कंटेनर में उपयोग के लिए, यह एक JNDI DataSource उपयोग करने के लिए सिफारिश की है कंटेनर द्वारा प्रदान किया गया।
  3. जे 2 ईई कंटेनर के बाहर कनेक्शन पूल डेटासेट का उपयोग करने के लिए, अपाचे के जकार्ता Commons DBCP या C3P0 पर विचार करें।