최대 절전 모드를 사용하여 이상한 동작이 발생합니다. 나는 MySQL 데이터베이스로 작업하면서 최대 절전 모드와 스프링을 사용하는 자바 웹 애플리케이션을 가지고있다.최대 절전 모드 풀이 연결을 해제하는 것 같습니다.
증상 :
show processlist;
내가 내 데이터 소스 구성에 정의 된 연결의 양을 볼 수 있지만 시간이 경과 할 때 자신의 ID 나를 생각하고, 변화 : 은 useing으로 내 SQL에 연결된 세션 확인 연결이 닫히고 다시 연결됩니다. 트래픽이없는 경우에도이 문제가 발생합니다.
풀링 된 연결이 데이터베이스에서 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 개 개의 다른 세션 공장이 동일한 데이터 소스를 사용하고 있다는 사실에 연결 될 수 있다는 것입니다,하지만 난 어떤 깊은 이해를 그리워 (또는되고 오른쪽으로 보라 왜 또는 완전히 틀린 지 모르겠다.)
나는 스프링 2.5를 사용하고, 바람둥이 6에서 실행되는 Hibernate 3.1.1을 추가 할 것이다. 나는 많은 장소에서 사람들이 hibernateTemplate의 사용을 낙담 시키지만 코드는 사용 중이다. 그것.
편집 :
130806 10:58:43 13 Connect [email protected] 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 구성이 있습니까?
감사
그래서 내 응용 프로그램에 영향을 미치지 않습니까? wait_timeout은 mysql 구성입니까? 하나의 데이터 소스에 대해 여러 세션 팩토리가있는 데 문제가 있습니까? –
MySQL에서는 정상적인 동작입니다. 네,'wait_timeout'은'my.cnf'에서 설정됩니다. –
나는 my.cnf를 확인하고 wait_timeout의 기본값을 사용하고있는 것을 보았다. 이것은 28800 초이며, ID의 변경 사항을 초 만에 볼 수 있습니다. 따라서이 문제는 문제가되는 것 같습니다. –