2012-03-16 11 views
6

Używam Spring 3.1.0.RELEASE, Hibernate 4.0.1.Final i MySQL 5.1. Jakiego źródła danych powinienem używać? Obecnie używam (fragment z pliku kontekstowego aplikacji) ...Jakie połączone źródło danych należy użyć w Spring 3.1.0, Hibernate 4.0.1.Final i 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> 

ale nie jest to zbiorcza źródłem danych, tworząc JDBC połączenia na każdym połączeniu. Kiedyś miałem ten hibernacji 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> 
    ... 

ale z powodu błędu w wiosennym 3.1.0, nie mogę użyć pliku hibernate.cfg.xml podczas konfigurowania mojego fasola fabryka sesji (co starałem się zrobić tak - snippet ze zgłoszenia pliku kontekstowego wiosny ...)

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

Odpowiedz

5

można użyć Apache DBCP, który powinien być spadek zastępczej coś takiego:

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

Kilka rzeczy aby zanotować:

  • możesz skonfigurować maksymalną liczbę połączeń.
  • można skonfigurować min. Liczbę bezczynnych połączeń.
  • zapytanie, które zostanie wykonane w celu sprawdzenia poprawności połączenia, jest nadal poprawne.

Istnieje więcej opcji do skonfigurowania podczas sprawdzania poprawności.

+0

Teraz org.apache.commons.dbcp2.BasicDataSource –

1

Apache DBCP to szeroko stosowana pula. Ale nie używaj jego opcji testWhileIdle. Po włączeniu wątek z eksmitem blokuje wszystkie nowe połączenia podczas sprawdzania niedziałających połączeń. Jest niedopuszczalne w żadnym środowisku nie-zabawkowym. Poza tym nie mamy z tym żadnych problemów.

Możesz przeczytać więcej na temat basenów w this SO thread, ale pamiętaj, że wszystkie płomienie na temat "najszybszej puli" mają sens tylko przy określonym strojeniu pod określonym obciążeniem.

5

Jeśli chcesz użyć czegoś dojrzałego i performant (np. Nie Apache DBCP), użyj BoneCP.

Oto opcje można dostosować:

<!-- 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 jest bardzo aktywny i pracach uczestniczyło są dość elastyczne.

Kolejny, na który możesz spojrzeć (usłyszysz o), to C3PO, mimo że BoneCP lepiej wykonuje numer , dużo niż.

1

Zasadniczo zależy to od aplikacji.

Istnieje poniżej warunki (pochodzące z here):

  1. Do testu lub autonomicznych środowiska poza pojemnikiem J2EE użyciu DriverManagerDataSource
  2. do stosowania w pojemniku J2EE zaleca się używanie JNDI DataSource dostarczone przez kontener.
  3. Aby użyć źródła danych puli połączeń poza kontenerem J2EE, rozważ Dżakarty Apache'a Commons DBCP lub C3P0.
Powiązane problemy