web-dev-qa-db-ja.com

Hibernate:接続プールとは何ですか?また、デフォルトの接続プールが本番に適さないのはなぜですか?

私はHibernateにあまり馴染みがなく、MySQLデータベースでそれを使用するWebアプリの開発を始めたばかりです。 community documentation tutorial の状態に気付きました:

組み込みのHibernate接続プールは、本番用ではありません。まともな接続プールにあるいくつかの機能が欠けています。

誰かがこれについて詳しく説明できますか?正確に何が欠けており、人々が「デフォルト」のものに抱えている問題は何ですか?グーグルで私はウェブサイトを見つけました here しかし、それは実際に問題を説明するのではなく、代わりにあなたが使うべきものだけです。

36
Kryptic

接続プールとは何ですか?また、デフォルトの接続プールが本番に適さないのはなぜですか?誰かがこれについて詳しく説明できますか?

接続プーリングは、接続を開く/準備する/閉じるための手法です。接続プーリングメカニズムは、接続を管理する機能を委任するソフトウェア(コンポーネント)です。アプリケーションは接続を要求し、それを使用して、プールに戻すだけです。コンポーネントは、N個の接続を開き、アプリケーションが要求したときにそれらを準備します。接続が古い場合、プーリングメカニズムはそれを閉じ、新しい接続を再度開きます。これは、コードの実際の実行中に接続が確立されるのを待つ必要がなく、古い接続を心配する必要がないため、接続のより良い使用法を表します。

Hibernateは実際の接続プーリングメカニズムを実際に出荷しません。それは非常に初歩的な内部接続マネージャーを提供します。その理由は簡単です:ほとんど(すべてではないにしても)アプリケーションサーバー(JBoss ASなど)およびサーブレットコンテナー(Tomcatなど)は、デフォルトで接続プーリングメカニズムを提供します。したがって、アプリケーションで詳細を心配する必要はありません。 ASに接続を要求するだけです。

私の意見では、接続プーリングについて心配する必要があるのは次の2つの場合のみです。

  1. スタンドアロンアプリケーション(コンテナ内で実行されない)を扱っている
  2. あなたは本当に接続プーリングの専門家であり、既存のどれもあなたのニーズに合いません。

しかし、私の経験では、「外部」接続プーリングを使用するほとんどの人は、接続プーリングに関する知識不足のためにそうしますおよびコンテナに関する知識不足。

50
jpkrohling

スタンドアロンアプリケーションを扱う場合、Hibernateによって管理されていないプーリングマネージャーがいくつかあります。 Hibernateは明示的なものを決して好みませんでした。長年にわたって多くの人々がやって来て、再び衰退してきました。最終的に判断するのは本当に難しいです。自分でプロジェクトをチェックして比較し、プロジェクトがどれだけ活発であるかを確認するのは良いことです。

以下に、スタンドアロンアプリケーションの最近(2017)のプーリングに関する推奨事項をアルファベット順に示します。

C3P0 http://www.mchange.com/projects/c3p0/

ひかり https://github.com/brettwooldridge/HikariCP

Vibur http://www.vibur.org/

2
Thomas