sql >> データベース >  >> RDS >> Mysql

私のspring+hibernateアプリはjdbc接続を閉じません

    問題はセッションではなく、接続プール、つまり正しく管理されているセッションにありましたが、JDBCレイヤーの接続プールが接続を閉じていませんでした。

    これらは私がそれらを修正するためにしたことです。

    JDBCコンテキスト構成

    1.-JDBC接続ファクトリをtomcatの古いBasicDataSourceFactoryからtomcatの新しいDataSourceFactoryに変更しました

    2.-この記事に基づいてJDBC設定を調整しました: http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency

    セッションファクトリxml構成

    3.-セッションファクトリ構成からこの行を削除しました:

    <prop key="hibernate.max_fetch_depth">1</prop>
    

    これが私の構成の結果です:

    JDBCコンテキスト構成

    <?xml version="1.0" encoding="UTF-8"?>
    <Context path="/" override="true" reloadable="false" swallowOutput="false">
        <Resource name="jdbc/catWDB" auth="Container" type="javax.sql.DataSource"
                  driverClassName="com.mysql.jdbc.Driver"
                  factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
                  url="@[email protected]"
                  username="@[email protected]"
                  password="@[email protected]"
                  maxActive="200"
                  maxIdle="50"
                  minIdle="10"
                  suspectTimeout="60"
                  timeBetweenEvictionRunsMillis="30000"
                  minEvictableIdleTimeMillis="60000"
                  validationQuery="select 1"
                  validationInterval="30000"
                  testOnBorrow="true"
                  removeAbandoned="true"
                  removeAbandonedTimeout="60"
                  abandonWhenPercentageFull="10"
                  maxWait="10000"
                  jdbcInterceptors="ResetAbandonedTimer;StatementFinalizer"
                />
    </Context>
    

    セッションファクトリxml構成

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource">
                <ref local="dataSource"/>
            </property>
            <property name="configLocation" value="classpath:hibernate.cfg.xml" />
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                    <prop key="hibernate.show_sql">false</prop>
                    <prop key="hibernate.max_fetch_depth">3</prop>
                </props>
            </property>
    </bean>
    


    1. Mysqlの正規表現で特殊なSQL文字をエスケープする方法

    2. SQLcl(Oracle)でクエリ結果をCSVファイルにエクスポートする方法

    3. 他のバッファリングされていないクエリがアクティブな間はクエリを実行できませんループ内のエラー

    4. MySQL:複数のフィールドに対する一意の制約