我正在使用Spring 3.1.0.RELEASE,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>
...
但是由于Spring 3.1.0中的一个错误,在配置我的会话工厂bean时我不能使用hibernate.cfg.xml文件(我试图这样做 - 来自spring应用程序上下文文件的片段。 ..)
<bean class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" id="sessionFactory">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
答案 0 :(得分: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>
需要注意的一些事项
在验证发生时,还可以配置其他选项。
答案 1 :(得分: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可以更好地执行 。
答案 2 :(得分:1)
Apache DBCP是一个广泛使用的池。但是不要使用其选项testWhileIdle
。启用时,它的后台逐出器线程会在检查死连接时锁定所有新连接。在任何非玩具环境中都是不可接受的。除此之外,我们没有任何问题。
您可以在this SO thread中阅读有关池的更多信息,但请记住,所有关于“最快池”的火焰只有在特定负载下进行特定调整才有意义。
答案 3 :(得分:1)
基本上取决于您的应用。
以下条件(取自here):
DriverManagerDataSource
JNDI DataSource
由容器提供。Commons DBCP
或C3P0
。