Springのデータソースの設定


どのような永続化技術によっても、Springではデータソースから取得されるデータ接続によってデータベースにアクセスする必要があります.従来のアプリケーションでは、データソースはWebアプリケーションサーバが提供するのが一般的である.Springでは、JNDIでアプリケーションサーバのデータソースを取得するだけでなく、Springコンテナで直接データソースを構成することもできます.また、依存しないユニットテストを行うためにコードでデータソースを作成することもできます.
1つのデータソースSpringを構成するサードパーティ依存パケットには、ApacheのDBPPとC 3 P 0の2つのデータソースの実装クラスパケットが含まれている.Springプロファイルでは、どちらの構成データソースも使用できます.
DBCPデータソースDBCPクラスパッケージは/lib/jakarta-commons/commons-dbcp.JAr,DBPPはJakarta commons-poolオブジェクトプールメカニズムに依存するデータベース接続プールであるため,クラスパスに/lib/jakarta- commons/commons-pool.jar.以下にDBCPを使用してMySqlデータソースを構成する構成断片を示します.
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3309/sampledb" />
<property name="username" value="root" />
<property name="password" value="1234" />
</bean>

BasicDataSourceでは、close()メソッドを使用してデータソースを閉じるため、Springコンテナが閉じるときにデータソースが正常に閉じるようにdestroy-method="close"属性を設定する必要があります.以上の必要なデータソース属性のほかに、いくつかの一般的な属性があります:defaultAutoCommit:データソースから返される接続が自動コミットメカニズムを採用するかどうかを設定し、デフォルト値はtrueです.defaultReadOnly:データソースが読み取り専用の操作しかできないかを設定し、デフォルト値はfalseである.maxActive:最大接続データベース接続数、0に設定した場合、制限がないことを示す.maxIdle:最大待機接続数が0に設定されている場合、制限がないことを示す.maxWait:最大待機秒数、単位はミリ秒で、時間を超えるとエラーメッセージを報告する;validationQuery:接続が成功したかどうかを検証するためのSQL文で、SQL文は少なくとも1行のデータを返さなければならない.例えば、簡単に「select count(*)from user」に設定できる.removeAbandoned:自己中断するかどうか、デフォルトはfalse;removeAbandonedTimeout:数秒後にデータ接続が自動的に切断され、removeAbandonedがtrueとなり、この値を提供する.logAbandoned:中断イベントを記録するかどうか、デフォルトはfalseである;
C 3 P 0データソースC 3 P 0は、libディレクトリでHibernateとともに公開されたオープンソースのJDBCデータソース実装プロジェクトであり、JDBC 3およびJDBC 2拡張仕様の説明のConnectionおよびStatementプールを実現している.C 3 P 0クラスパッケージは/lib/c3p0/c3p0-0.9.0.4.jar.次に、C 3 P 0を使用してOracleデータ・ソースを構成します.
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value=" oracle.jdbc.driver.OracleDriver "/>
<property name="jdbcUrl" value=" jdbc:oracle:thin:@localhost:1521:ora9i "/>
<property name="user" value="admin"/>
<property name="password" value="1234"/>
</bean>

ComboooledDataSourceは、BasicDataSourceと同様に、Springコンテナが閉じたときにデータソースが正常に解放されるように、データソースを閉じるためのclose()メソッドを提供します.C 3 P 0はDBCPよりも豊富な構成属性を持ち、これらの属性によって、データソースに対して各種の有効な制御を行うことができる:acquireIncrement:接続プールの中の接続が切れた時、C 3 P 0は一度に新しい接続の数を作成する;acquireRetryAttempts:データベースからの新規接続の取得に失敗した後に取得を繰り返す回数を定義し、デフォルトは30である.acquireRetryDelay:2回の接続間隔、単位ミリ秒、デフォルトは1000;autoCommitOnClose:接続がクローズされると、デフォルトでコミットされていないすべての操作がロールバックされます.デフォルトはfalseです.automaticTestTable:C 3 P 0は、Testという空のテーブルを作成し、それに付随するクエリ文を使用してテストする.このパラメータが定義されている場合、属性preferredTestQueryは無視されます.このTestテーブルでは何もできません.C 3 P 0テストで使用され、デフォルトはnullです.breakAfterAcquireFailure:接続の取得に失敗すると、取得待ちのすべてのスレッドに異常が発生します.ただし、データ・ソースは有効に保持され、次回getConnection()を呼び出したときに接続の取得を試み続けます.trueに設定すると、接続の取得に失敗した後、データ・ソースは切断され、永続的に閉じることを宣言します.デフォルトはfalseです.checkoutTimeout:接続プールが切れた時にクライアントがgetConnection()を呼び出してから新しい接続を取得する時間を待ち、タイムアウト後にSQLExceptionを投げ出し、0に設定すると無期限待ちとなる.単位ミリ秒、デフォルトは0です.connectionTesterClassName:ConnectionTesterまたはQueryConnectionTesterのクラスを実装することで接続をテストし、クラス名はフルネームに設定する必要がある.デフォルトはcom.mchange.v2.C3P0.impl.DefaultConnectionTester; idleConnectionTestPeriod:何秒おきにすべての接続プールの空き接続を検査し、デフォルトは0で検査しないことを表す.initialPoolSize:初期化時に作成した接続数は、minPoolSizeとmaxPoolSizeの間で値を取る.デフォルトは3です.maxIdleTime:最大アイドル時間、アイドル時間を超えた接続は破棄されます.0または負数の場合は破棄されません.デフォルトは0です.maxPoolSize:接続プールに保持されている最大接続数.デフォルトは15です.maxStatements:JDBCの標準パラメータで、データソースにロードされたPreparedStatementの数を制御する.ただし、プリキャッシュされたStatementは、接続プール全体ではなく単一のConnectionに属します.したがって、このパラメータを設定するには、maxStatementsとmaxStatementsPerConnectionが両方とも0の場合、キャッシュは閉じられます.デフォルトは0です.maxStatementsPerConnection:接続プール内の単一接続が持つ最大キャッシュStatement数.デフォルトは0です.numHelperThreads:C 3 P 0は非同期であり、遅いJDBC操作はヘルププロセスによって完了する.これらの操作を拡張することで、パフォーマンスを効果的に向上させ、マルチスレッドによって複数の操作を同時に実行することができます.デフォルトは3です.preferredTestQuery:すべての接続テストで実行されるテスト文を定義します.接続テストを使用する場合、このパラメータはテスト速度を著しく向上させることができます.テストされたテーブルは、初期データソースのときに存在する必要があります.デフォルトはnullです.propertyCycle:ユーザーがシステム構成パラメータを変更して実行するまでの最大待ち時間の秒数.デフォルトは300です.testConnectionOnCheckout:性能消耗が大きいので必要な時だけ使用してください.trueに設定すると、各connectionがコミットされるたびに有効性が検証されます.idleConnectionTestPeriodやautomaticTestTableなどの方法で接続テストのパフォーマンスを向上させることをお勧めします.デフォルトはfalseです.testConnectionOnCheckin:trueに設定すると、接続を取得しながら接続の有効性が検証されます.デフォルトはfalseです.
1
 
JNDIデータソースを取得するアプリケーションが、WebLogicやWebsphereなどの高性能アプリケーションサーバに構成されている場合は、アプリケーションサーバ自体が提供するデータソースを使用することが望ましい場合があります.アプリケーション・サーバのデータ・ソースはJNDIオープン・呼び出し元を使用し、SpringはJNDIリソースを参照するJndiobjectFactoryBeanクラスを提供します.以下は簡単な構成です.
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/bbt"/>
</bean>

jndiNameで参照するJNDIデータソース名を指定します.Spring 2.0はJ 2 EEリソースを取得するためにjeeネーミングスペースを提供し、jeeネーミングスペースを通じてJ 2 EEリソースの参照を効果的に簡略化することができる.以下はjeeネーミングスペースを使用してJNDIデータソースを参照する構成です.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"> 
<jee:jndi-lookup id="dataSource" jndi-name=" java:comp/env/jdbc/bbt"/>
</beans>
 
Springのデータソース実装クラスSpring自体も、org.springframework.jdbc.Datasourceパッケージにあります.このクラスはjavaxを実現した.sql.DataSourceインタフェースですが、プール化された接続メカニズムはありません.getConnection()を呼び出して新しい接続を取得するたびに、新しい接続を簡単に作成します.したがって、このデータ・ソース・クラスは、追加の依存クラスを必要としないため、ユニット・テストまたは単純な独立したアプリケーションで使用するのに適しています.次に、DriverManagerDataSourceの簡単な使用を見てみましょう.
DriverManagerDataSource ds = new DriverManagerDataSource ();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3309/sampledb");
ds.setUsername("root");
ds.setPassword("1234");
Connection actualCon = ds.getConnection();

もちろん、DriverManagerDataSourceは構成によって直接使用することもできます.小結は、永続化テクノロジーにかかわらず、データ・ソースを定義する必要があります.Springには、2つのデータ・ソースのインプリメンテーション・クラス・パッケージが付属しており、定義を自分で選択できます.実際の導入では、アプリケーション・サーバ自体が提供するデータ・ソースを直接使用する場合があります.この場合、JndiobjectFactoryBeanまたはjeeネーミング・スペースを使用してJNDIのデータ・ソースを参照できます.