2012-03-16 6 views
6

Estoy usando Spring 3.1.0.RELEASE, Hibernate 4.0.1.Final y MySQL 5.1. ¿Cuál es la fuente de datos agrupados que debería usar? Actualmente estoy usando (fragmento del archivo de contexto de aplicación) ...¿Qué fuente de datos combinados debería usar para Spring 3.1.0, Hibernate 4.0.1.Final y 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> 

pero esto no es una fuente de datos agrupados, creación de conexiones JDBC en cada llamada. Solía ​​tener esta configuración de 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> 
    ... 

pero debido a un error en la primavera 3.1.0, no puedo usar un archivo de configuración de mi hibernate.cfg.xml cuando frijol fábrica de sesiones (que he intentado hacer como esto - fragmento del archivo de contexto de aplicación de primavera ...)

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

Respuesta

5

puede utilizar Apache DBCP, que debe ser una gota en el reemplazo o menos así:

<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> 

algunas cosas para tener en cuenta

  • puede configurar el número máximo de conexiones.
  • puede configurar el número mínimo de conexiones inactivas.
  • una consulta que se ejecutan para validar la conexión sigue siendo válida. Existen

Otras opciones para configurar la validación cuando sucede.

+0

Ahora org.apache.commons.dbcp2.BasicDataSource –

1

Apache DBCP es un grupo ampliamente utilizado. Pero no usa su opción testWhileIdle. Cuando está habilitado, es un hilo de desalojo de fondo que bloquea todas las conexiones nuevas que se ejecutan mientras se comprueban conexiones inactivas. Es inaceptable en cualquier entorno que no sea de juguete. Además de esto, no tenemos problemas con eso.

Puede leer más sobre piscinas en this SO thread, pero tenga en cuenta que todas las llamas sobre "piscina más rápida" solo tienen sentido con la afinación específica bajo carga específica.

5

Si desea utilizar algo maduro y performant (por ejemplo, no Apache DBCP), use BoneCP.

Estas son las opciones que se pueden modificar:

<!-- 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 es muy activo, y committers son muy sensibles.

Otro que puede ver (lo oiría) es C3PO, aunque BoneCP realiza mucho mejor.

1

Básicamente depende de su aplicación.

Hay siguientes condiciones (tomadas de here):

  1. Para la prueba o entornos autónomos fuera de un contenedor J2EE, utilice DriverManagerDataSource
  2. Para uso en un contenedor J2EE, se recomienda utilizar un JNDI DataSource proporcionado por el contenedor.
  3. Para utilizar un origen de datos de grupo de conexiones fuera de un contenedor J2EE, considere Apache's Jakarta Commons DBCP o C3P0.
Cuestiones relacionadas