1

私は Spring MVC 3 と Hibernate 3.6 を使用しています。xml 構成のトランザクション管理を使用しています。コードはうまく機能しますが、JDBC はリリースされていません。

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&amp;useUnicode=true&amp;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) - トランザクション DEBUG [myExec-2] (SessionFactoryUtils.java:789) の後に Hibernate セッション [org.hibernate.impl.SessionImpl@52ab7af2] を閉じる - Hibernate セッションを閉じる

しかし、JProfilerでは、ご覧のように接続がまだ開いていることがわかります

ここに画像の説明を入力

これは本当に問題を引き起こしています。アプリケーションが大量のデータベース作業を行っているため、作業が完了したらすぐに接続を閉じる必要があります。 maxIdle を使用する必要がありますか?

4

1 に答える 1