Я использую Spring MVC 3 и Hibernate 3.6, я использую xml сконфигурированное управление транзакциями, мой код работает greate, но мой JDBC не выпущен, хотя он говорит, что это так.Принудительное спящий режим для освобождения соединения в сеансе Spring MVC
Я проверил его с помощью JProfiler, и он говорит, что соединение открыто.
это моя весна-код конфигурации
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/parse_web?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root" />
<property name="password" value="miles106" />
<property name="initialSize" value="5"/>
<property name="maxActive" value="50000"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="ds" />
<property name="mappingResources">
<list>
<value>com/mubasher/parsewebpage/entities/Changes.hbm.xml</value>
<value>com/mubasher/parsewebpage/entities/Owners.hbm.xml</value>
<value>com/mubasher/parsewebpage/entities/Ownerships.hbm.xml</value>
<value>com/mubasher/parsewebpage/entities/TargetCompanies.hbm.xml</value>
<value>com/mubasher/parsewebpage/entities/TempData.hbm.xml</value>
<value>com/mubasher/parsewebpage/entities/Exceptions.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.connection.useUnicode">true</prop>
<prop key="hibernate.connection.characterEncoding">UTF-8</prop>
<prop key="hibernate.connection.charSet">UTF-8</prop>
<prop key="hibernate.connection.release_mode">after_statement</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
и это мой отлаживать код
DEBUG [myExec-2] (JDBCTransaction.java:223) - повторное включение автоматической фиксации DEBUG [myExec-2] (JDBCTransaction.java:143) - совершено соединение JDBC DEBUG [myExec-2] (ConnectionManager.java:427) - агрессивно освобождает соединение JDBC DEBUG [myExec-2] (ConnectionManager.java:464) - освобождение соединения JDBC [(открыть PreparedStatements: 0, глобально: 0) (открыть ResultSets: 0, глобально: 0)] DEBUG [myExec-2] (HibernateTransactionManager.java:734) - Закрытие сеанса спящего режима [[email protected]] после транзакции DEBUG [myExec-2] (SessionFactoryUtils.java:789) - Закрытие сессии Hibernate
но в JProfiler я могу видеть, что соединение остается открытым, как вы видите
это действительно вызывает я проблемы, мое приложение делает огромную работу с базами данных, поэтому мне нужно закрыть соединение, как только работа будет Я должен использовать maxIdle?
Благодарим Павла, проблема в том, что когда я оставляю свое приложение таким образом, и повторное повторение после того, как однажды говорят, пул соединений порождает ошибку, что какой-то запрос был отправлен в источник со вчерашнего дня, и он не вернулся, и когда я использую проверку утечки tomcat, он говорит, что это может быть утечка – engma
Ad. проблема соединения - если у вас есть пул соединений, вам нужно убедиться, что соединение все еще живое (например, машина базы данных может быть перезагружена за время ожидания соединения в пуле), когда вы повторно используете ее. Вот почему 'BasicDataSource' поддерживает' validationQuery'. Когда соединение будет повторно использоваться, пул вызывает этот запрос, чтобы убедиться, что соединение живое. Мы используем 'SELECT 1' (специфичный PostgreSQL, возможно, не работает в MySQL). –
Объявление. утечка памяти - это очень раздражает сообщение проверки Tomcat. Я думаю, вы можете проигнорировать это. –