2

プロジェクトではSpringとHibernateを使用しています。私はそのような小道具を使います

        <prop key="hibernate.hbm2ddl.auto">update</prop>
        <prop key="hibernate.dialect">${chassis.storage.hibernate.dialect}</prop>
        <prop key="hibernate.show_sql">false</prop>
        <prop key="hibernate.jdbc.batch_size">${chassis.storage.hibernate.batch_size}</prop>
        <prop key="hibernate.c3p0.min_size">5</prop>
        <prop key="hibernate.c3p0.max_size">50</prop>
        <prop key="hibernate.c3p0.timeout">300</prop>
        <prop key="hibernate.c3p0.max_statements">50</prop>
        <prop key="hibernate.c3p0.idle_test_period">3000</prop>

私がいくつかのデータを書くとき、私はそのようなコードを使います

    getHibernateTemplate().execute(new HibernateCallback<Void>() {
        @Override
        public Void doInHibernate(Session session) throws HibernateException, SQLException {
            for (Data data : datas) {
                session.persist(data);
            }
            session.flush();
            return null;
        }
    });

しかし、私には例外があります

原因:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:データソースが接続の確立を拒否しました。サーバーからのメッセージ:「接続が多すぎます」

netstat -an | grep 3306私はたくさんのつながりを使って見ています。問題は何ですか、あなたはどう思いますか?

4

2 に答える 2

6

問題はデータソースにありました。使用しました

org.springframework.jdbc.datasource.DriverManagerDataSource

今私は使用org.apache.commons.dbcp.BasicDataSourceし、それは完璧に動作します!

ここで同様の質問を参照してください -HibernateTemplateおよびSessionFactoryを使用した単一のデータベース接続

于 2012-12-28T08:57:15.403 に答える
0

MySQLのデフォルトの接続数が151<prop key="hibernate.c3p0.max_size">50</prop>であるのに対し、最大接続数はありますが、そのデータベースインスタンスにアクセスするのはアプリケーションだけですか?そうは見えません。接続が開いたままになっている場合でも(c3p0を使用している間は疑わしい)、最大50を設定しています。別の可能性は、別の場所での接続リーク、追加の接続を取得するHibernate、SpringのいずれかのJDBCコードまたは構成です。

更新:MySQLの接続数のmax_connections構成が低い値に変更された可能性があります。

更新:たとえばMySQLワークベンチを使用して、データベースインスタンスのアクティブな接続がどこから発信されているかを確認します。

于 2012-12-27T11:59:18.423 に答える