2012-03-16 52 views
6

我使用Spring 3.1.0.RELEASE,Hibernate 4.0.1.Final和MySQL 5.1。什麼是我應該使用的合併數據源?我目前使用的(從應用程序上下文文件片段)...我應該爲Spring 3.1.0,Hibernate 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連接。我曾經有過這樣的Hibernate配置(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的一個bug,在配置時,我不能使用hibernate.cfg.xml文件我會話工廠bean(我試圖做這樣的 - 從Spring應用程序上下文文件片段...)

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

回答

5

您可以使用Apache 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

Now org.apache.commons.dbcp2.BasicDataSource – 2017-06-18 00:55:00

1

Apache DBCP是一個廣泛使用的池。但請勿使用其選項testWhileIdle。啓用時,後臺逐出線程鎖定所有新連接,同時檢查無效連接。在任何非玩具環境中都是不可接受的。除此之外,我們沒有任何問題。

您可以在this SO thread中閱讀更多關於泳池的內容,但請記住,關於「最快泳池」的所有火焰只有在特定負載下進行特定調節時纔有意義。

5

如果你想使用一些成熟performant(例如,而不是Apache DBCP),使用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,雖然BoneCP執行很多更好。

1

基本上取決於您的應用程序。

有以下條件(從here截取):

  1. 對於測試或J2EE容器的獨立環境,使用DriverManagerDataSource
  2. 對於J2EE容器使用時,建議使用JNDI DataSource由容器提供的 。
  3. 要在J2EE容器之外使用連接池數據源,請考慮 Apache的Jakarta Commons DBCPC3P0
相關問題