2010-11-16 11 views
3

À ce stade, j'utilise DriverManagerDataSource avec l'annotation @Transactional pour gérer les transactions. Mais toutes les transactions sont très très lentes, probablement parce que la source de données ouvre et ferme la connexion à db à chaque fois.Configurer la source de données de printemps pour hibernate et @Transactional

Quelle source de données devrais-je utiliser pour accélérer la transaction?

Répondre

4

DriverManagerDataSourceDriverManagerDataSource n'est pas un pool de connexions et ne doit être utilisé que pour les tests. Vous devriez essayer BasicDataSource de Apache Commons DBCP. Quelque chose comme:

<bean id="dataSource" destroy-method="close" 
    class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="${jdbc.driverClassName}"/> 
    <property name="url" value="${jdbc.url}"/> 
    <property name="username" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
</bean> 
+0

Merci, très vite maintenant. – blow

8

J'utilise dans ma combinaison d'application de deux approches. le premier est le pooling de connexion c3p0, c'est presque la même solution que chkal sugested. La deuxième approche consiste à utiliser Spring lazyConnectionDataSourceProxy, qui crée un proxy de chargement paresseux qui charge la connexion uniquement si vous cliquez sur la base de données. C'est très utile, quand vous avez un cache de second niveau et que vous ne lisez que les données et requêtes en cache - la base de données ne sera pas touchée, et vous n'avez pas besoin d'acquérir de connexion (ce qui est très cher).

<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
    <property name="driverClass" value="${jdbc.driverClassName}" /> 
    <property name="jdbcUrl" value="${jdbc.url}" /> 
    <property name="user" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
    <!-- Pool properties --> 
    <property name="minPoolSize" value="5" /> 
    <property name="initialPoolSize" value="10" /> 
    <property name="maxPoolSize" value="50" /> 
    <property name="maxStatements" value="50" /> 
    <property name="idleConnectionTestPeriod" value="120" /> 
    <property name="maxIdleTime" value="1200" /> 

</bean> 

<bean name="lazyConnectionDataSourceProxy" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy"> 
    <property name="targetDataSource" ref="dataSource" /> 
</bean> 
+1

L'attribut destroy-method = "close" est manquant pour comboPooledDatasource – malejpavouk