休止状態を使用すると奇妙な動作が発生します。MySQLデータベースを操作して、休止状態と春を使用するJava Webアプリケーションがあります。
症状: 以下を使用して、SQL で接続されたセッションを確認します。
show processlist;
データソース構成で定義された接続の量を確認できますが、時間が経つと ID が変化し、接続が閉じられてから再接続されていると思われます。この動作は、トラフィックがない場合でも発生します。
プールされた接続がデータベースに ID を保持することを期待しています。
構成:
<bean id="DataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<property name="maxWait" value="10" />
<property name="maxIdle" value="5" />
<property name="maxActive" value="0" />
<property name="validationQuery" value="SELECT 1"/>
<property name="testOnBorrow" value="true" />
<property name="testOnReturn" value="true"/>
<property name="testWhileIdle" value="true"/>
<property name="timeBetweenEvictionRunsMillis" value="10000"/>
<property name="minEvictableIdleTimeMillis" value="60000"/>
</bean>
<bean id="SessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="DataSource"></property>
<property name="mappingResources">
<list>
<value>
data/entities/entity.hbm.xml
</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
</bean>
<bean id="entityDaoImpl" class="data.dao.EntityDaoImpl">
<property name="sessionFactory" ref="SessionFactory" />
</bean>
<bean id="SessionFactory2"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="DataSource"></property>
<property name="mappingResources">
<list>
<value>
data/entities/entity2.hbm.xml
</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
</bean>
<bean id="entity2DaoImpl" class="data.dao.Entity2DaoImpl">
<property name="sessionFactory" ref="SessionFactory2" />
</bean>
私の推測では、2 つの異なるセッション ファクトリが同じデータソースを使用しているという事実に関連している可能性があります。
また、Tomcat 6で実行されているSpring 2.5とHibernate 3.1.1を使用していることも追加します。多くの場所で、hibernateTemplateの使用を思いとどまらせていることに気づきましたが、コードはそれを使用しています。
編集:
監査を開いて、接続が何をしているかを理解しようとしました。
130806 10:58:43 13 Connect user@localhost on database
130806 10:58:43 13 Query SET NAMES hebrew
130806 10:58:43 13 Query SET character_set_results = NULL
130806 10:58:43 13 Query SHOW VARIABLES
130806 10:58:43 13 Query SHOW COLLATION
130806 10:58:43 13 Query SET autocommit=1
130806 10:58:43 13 Query SET sql_mode='STRICT_TRANS_TABLES'
130806 10:58:43 13 Query SELECT 1
130806 10:58:43 13 Query SET autocommit=1
130806 10:58:54 13 Query SET autocommit=1
130806 10:58:54 13 Query SELECT 1
130806 10:58:54 13 Query SET autocommit=1
130806 10:59:25 13 Query SET autocommit=1
130806 10:59:25 13 Query SELECT 1
130806 10:59:25 13 Query SET autocommit=1
130806 11:00:27 13 Quit
私の理解では、これは、彼が Quit コマンドを取得したため、DB 側に問題がないことを示しています。繰り返しになりますが、データ ソース構成に欠けている keepAlive 構成があるのだろうか?
ありがとう