春のデータベース接続プール

なぜ、データベース接続プールを使用

データベース接続は、キー、限られており、高価な資源である、データベース接続の作成と解放は、しばしば、このような操作は、パフォーマンス上のオーバーヘッドの多くを生成し、これにより減少した回答率のサイトにつながる行われ、厳しい非常に時間のかかる作業でありますサーバーがクラッシュします。データベース接続プールは、オーバーヘッドを大幅に節約することができます。

データベース接続プールは何ですか

データベース接続プールは、(データベース接続プーリング)データベース接続オブジェクトの一定数の初期化プログラムで作成され、そしてよりもむしろ、アプリケーションは、既存のデータベース接続を再利用することを可能にするメモリの領域にその保存、再構築され行方不明の接続によって引き起こされるデータベース接続の解放を避けるためには、データベースが存在しないので、それは、最大アイドル時間データベース接続よりも多くのアイドルをリリースする予定。この技術は、大幅にデータベース操作のパフォーマンスを向上させることができます。

データベース接続プールだけでなく、データベース接続を作成する責任があり、また流通、管理、データベース接続の解放を担当して、接続プール接続プールの初期数、接続の最小数、接続の最大数、最大アイドル時間の設定パラメータによって制御することができます。

接続の最小数:
データベース接続プールが維持されている、データベースへの塗布量が接続されていない場合ので、データベース接続リソースの数が多いであろうが浪費されます。

最大接続数:
接続プールに格納できる最大接続数を定義するデータベース接続要求は、接続の最大数を超えた場合は、データベースへの即時の接続を取得することはできませんので、新しいデータベース接続要求は、アプリケーションになりますされ、キューに待機を行きますプログラムは、機能的な影響を生成します。

接続の最小数と接続ギャップの最大数:
最小接続数とあまり違いその接続の最大数は、最初の接続要求は、後に、より新しいデータベースを作成するには、接続要求の接続と同等の接続の最小数よりも、利益になります。しかし、接続は、データベース接続の最小数より大きいなくなった直後にリリースされることはありませんが、再利用待つか、解放し、それが最大のアイドル時間を超過しているよう。

原則

プログラムの初期化、プログラムがデータベースにアクセスする際にデータベース接続がなく新しいデータベース接続を作成するよりも、しかし、接続プールから樹立目標アイドル接続のうち、記憶領域に記憶されている一定量(最小接続数)を作成;接続プールは、すべてして接続するデータベース接続の最小数は、アプリケーションが切断の使用を終えた後に、データベース接続オブジェクトがすぐにではない、接続プールは、アプリケーションで使用可能な新しいデータベース接続を作成し、占領していること、そして、アイドルオブジェクトでない場合アイドル時間が最大アイドル時間を超えた場合、リンクが閉鎖され、解放され、プログラムのニーズが再びデータベースにアクセスする際に、データベース接続プールは、アプリケーションに接続すること最長アイドル状態になる、データベース接続要求が最大値を超えた場合接続は、データベース接続要求を待ちキューに追加され、プログラムが終了するが、すべてのデータベース接続プールと解放リソースを切断します。

共通データベース接続プール

1は、DBCP:DBCP(データベース接続プール)プールは、Java Apacheの上のデータベース接続プールの項目に接続され、アセンブリプールTomcatの接続が使用され、単独でDBCPは、3つのパッケージが必要です。コモンpool.jar、共通dbcp.jarを、共通collections.jar.dbcpなし自動復旧機能しないアイドル状態の接続。公式サイト:のhttp://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

図2は、C3P0:C3P0はオープ​​ンソースJDBC接続プール、実装するデータソースとJNDI、結合支持しJDBC2 JDBC3仕様標準の拡張です。C3P0は非同期操作で、JDBC操作を支援することにより、ゆっくりとしたプロセスは完了です。これらの操作は、効果的にパフォーマンスを向上させる拡張することができます。これは、現在、その上のオープンソースプロジェクトにHibernate、Springとを使用しています。C3P0自動復旧アイドル接続。注:JNDI(JavaのネーミングおよびディレクトリインタフェースのJavaネーミングとディレクトリインターフェース)は、SUNのJavaネーミングシステムインタフェースが提供する標準です。公式サイト:httpsを://sourceforge.net/projects/c3p0/

3、ドルイド:ドルイドは、オープンソース・プラットフォーム上のオープンソース・データベース接続プールAlibabaの項目である10マイクロ秒以内に簡単なSQL文を使用した場合、接続は、複雑なSQLと30マイクロ秒、効率的なパフォーマンスをプール。公式サイト:httpsを://github.com/alibaba/druid

最速のデータベース接続プール、SpringBoot2.0 HikariCPも、デフォルトの接続プールの設定として採用されてなりつつHikariCPデータベース接続プールの新星にもかかわらず、しかし、PK他のデータベース接続プールの技術うち、:4、HikariCP。公式サイト:のhttp://brettwooldridge.github.io/HikariCP/

春の接続プールの設定

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" lazy-init="false" destroy-method="close">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
	<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8"></property>	
	<property name="username" value="root"></property>	
	<property name="password" value="root"></property>	
	<!-- 连接只读数据库时配置为true, 保证安全 -->	
	<property name="readOnly" value="false" /> 	
	<!-- 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 -->	
	<property name="connectionTimeout" value="30000" /> 	
	<!-- 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 -->	
	<property name="idleTimeout" value="600000" /> 	
	<!-- 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like '%timeout%';) -->	
	<property name="maxLifetime" value="1800000" /> 	
	<!-- 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count) -->	
	<property name="maximumPoolSize" value="15" />
</bean>

春のXML構成ファイル、目的は春に、クラスPropertyPlaceholderConfigurerスプリングを提供するときにプロパティファイルで定義された保守管理システム、多くの場合、構成ファイルのパス情報またはデータソースを容易にすることが、情報を読み出すことができますPropertyPlaceholderConfigurer設定ファイルのファイルパスで、可変位置のプロパティを指定し、プロパティファイル内の設定情報を読み出し$ {}、以下の実施例の形態で使用することができます。

<!-- 配置PropertyPlaceholderConfigurer如下 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">	
	<property name="location" value="classpath:config/jdbc.properties"></property>
</bean>

<!-- 配置数据库连接池 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" lazy-init="false" destroy-method="close">
	<property name="driverClassName" value="${driverClassName}"></property>	
	<property name="jdbcUrl" value="${jdbcUrl}"></property>	
	<property name="username" value="${username}"></property>	
	<property name="password" value="${password}"></property>	
	<property name="readOnly" value="${readOnly}" /> 	
	<property name="connectionTimeout" value="${connectionTimeout}" /> 	
	<property name="idleTimeout" value="${idleTimeout}" /> 	
	<property name="maxLifetime" value="${maxLifetime}" /> 	
	<property name="maximumPoolSize" value="${maximumPoolSize}" />
</bean>

プロパティ・プレースホルダー第ビーン上記のコードを簡素化することができる:春2.5後、春は文脈によってコンテキスト・ネームスペースを提供します。

<context:property-placeholder location="classpath:config/jdbc.properties"/>
公開された101元の記事 ウォンの賞賛3 ビュー2244

おすすめ

転載: blog.csdn.net/S_Tian/article/details/104206007