:SpringフレームワークでDataSourceオブジェクトを取得する方法

12283 ワード

1,orgを用いる.springframework.jdbc.datasource.DriverManagerDataSource 
説明:DriverManagerDataSource接続を確立するには、接続があれば新しいconnectionを作成し、プールを接続する役割はありません. 
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName"><value>${jdbc.driverClassName}</value></property>
    <property name="url"><value>${jdbc.url}</value></property>
    <property name="username"><value>${jdbc.username}</value></property>
    <property name="password"><value>${jdbc.password}</value></property>
</bean>

 2.使用org.apache.commons.dbcp.BasicDataSourceの説明:接続プール・テクノロジーを使用したデータ・ソースの構成方法を推奨します.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
      <value>oracle.jdbc.driver.OracleDriver</value>
    </property>
    <property name="url">
          <value>jdbc:oracle:thin:@localhost:1521:orcl</value>
    </property>
    <property name="username">
        <value>test</value>
    </property>
    <property name="password">
        <value>test</value>
    </property>
    <property name="maxActive">
        <value>255</value>
    </property>
    <property name="maxIdle">
        <value>2</value>
    </property>
    <property name="maxWait">
        <value>120000</value>
    </property>
</bean>

 3.使用org.springframework.jndi.JndiobjectFactoryBeanの説明:JndiobjectFactoryBeanはJNDIでDataSourceを取得できます
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>java:comp/env/jdbc/roseindiaDB_local</value></property> 
</bean>

まとめ:3つの方式のうち1つ目は接続プールを使用していないため、プロジェクトではあまり使用されず、3つ目はweb serverでデータソースを配置する必要があり、配置に不便であるため、2つの方式ごとにデータソースの配置を行うことをお勧めします.Springはサードパーティ依存パケットに2つのデータソースの実装クラスパケットを含み,1つはApacheのDBPP,2つはC 3 P 0である.Springプロファイルでは、どちらの構成データソースも使用できます.DBPPクラスパッケージは/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"属性を設定する必要があります.以上の必須データソース属性に加えて、defaultReadOnly:データソースが読み取り専用操作のみを実行できるかどうかを設定し、デフォルト値はfalseです.maxActive:最大接続データベース接続数、0に設定した場合、制限がないことを示します.maxIdle:最大待機接続数が0に設定されている場合、制限がないことを示します.maxWait:最大待機秒数、単位はミリ秒で、時間を超えるとエラーメッセージが表示されます.validationQuery:接続が正常に行われたかどうかを確認するために使用されるSQL文です.SQL文は、単純に「select count(*)from user」に設定できるように、少なくとも1行のデータを返さなければなりません.removeAbandoned:自己中断するかどうか、デフォルトはfalseです.removeAbandonedTimeout:数秒後にデータ接続が自動的に切断され、removeAbandonedがtrueになり、この値が提供されます.logAbandoned:割り込みイベントを記録するかどうか、デフォルトはfalseです.C 3 P 0はオープンソースのJDBCデータソース実装プロジェクトであり、libディレクトリでHibernateとともに公開され、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> 
CombooledDataSourceは、BasicDataSourceと同様にデータ・ソースを閉じるためのclose()メソッドを提供します.これにより、Springコンテナが閉じたときにデータ・ソースが正常に解放されることを保証できます.C 3 P 0はDBCPよりも豊富な構成属性を持ち、これらの属性により、データソースに対して様々な有効な制御を行うことができる: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:接続プール内の1つの接続が持つ最大キャッシュStatement数.デフォルトは0です.numHelperThreads:C 3 P 0は非同期で動作し、遅いJDBC動作はヘルププロセスによって完了する.これらの操作を拡張することで、パフォーマンスを効果的に向上させ、マルチスレッドによって複数の操作を同時に実行することができます.デフォルトは3です.preferedTestQuery:すべての接続テストで実行されるテスト文を定義します.接続テストを使用する場合、このパラメータはテスト速度を著しく向上させることができます.テストされたテーブルは、初期データソースのときに存在する必要があります.デフォルトはnullです.propertyCycle:ユーザーがシステム構成パラメータを変更して実行するまでの最大待機秒数.デフォルトは300です.testConnectionOnCheckout:性能消費が大きいので必要なときだけ使用してください.trueに設定すると、各connectionがコミットされるたびに有効性が検証されます.idleConnectionTestPeriodやautomaticTestTableなどの方法で接続テストのパフォーマンスを向上させることをお勧めします.デフォルトはfalseです.testConnectionOnCheckin:trueに設定すると、接続を取得しながら接続の有効性が検証されます.デフォルトはfalseです.プロファイルの読み込み方法属性:
<bean id="propertyConfigurer" 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="/WEB-INF/jdbc.properties"/> 
</bean> 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
destroy-method="close"> 
    <property name="driverClassName" value="${jdbc.driverClassName}" /> 
    <property name="url" value="${jdbc.url}" /> 
    <property name="username" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
</bean>
jdbc.propertiesプロパティファイルで定義するプロパティ値:jdbc.url= jdbc:mysql://localhost:3309/sampledb     jdbc.username=root     jdbc.password=1234では、開発者が${xxx}の前後に誤ってスペースを入力することがよくあります.これらのスペース文字は変数と結合して属性の値として使用されます.たとえば、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>  
 
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自体もorgにある簡単なデータソース実装クラスDriverManagerDataSourceを提供している.springframework.jdbc.Datasourceパッケージにあります.このクラスはjavaxを実現した.sql.DataSourceインタフェースですが、プール化された接続メカニズムはありません.getConnection()を呼び出して新しい接続を取得するたびに、新しい接続を簡単に作成します.したがって、このデータ・ソース・クラスは、追加の依存クラスを必要としないため、ユニット・テストまたは単純な独立したアプリケーションで使用するのに適しています.次に、DriverManagerDataSourceの簡単な使用を見てみましょう.もちろん、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();
まとめ
永続化テクノロジーにかかわらず、データ・ソースを定義する必要があります.Springには、2つのデータ・ソースのインプリメンテーション・クラス・パッケージが付属しており、定義を自分で選択できます.実際の導入では、アプリケーション・サーバ自体が提供するデータ・ソースを直接使用する場合があります.この場合、JndiobjectFactoryBeanまたはjeeネーミング・スペースを使用してJNDIのデータ・ソースを参照できます.
DBCPとC 3 PO構成の違い:
DBCP:
 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
    <property name="driverClassName">  
        <value>oracle.jdbc.driver.OracleDriver</value>  
    </property>  
    <property name="url">             
        <value>jdbc:oracle:thin:@10.10.10.6:1521:DataBaseName</value>  
     </property>  
    <property name="username">  
        <value>testAdmin</value>  
    </property>  
    <property name="password">  
        <value>123456</value>  
    </property>  
</bean>
 
 C3PO:
 
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
    <property name="driverClass">  
        <value>oracle.jdbc.driver.OracleDriver</value>  
    </property>  
    <property name="jdbcUrl">             
        <value>jdbc:oracle:thin:@10.10.10.6:1521:DataBaseName</value>  
     </property>  
    <property name="user">  
        <value>testAdmin</value>  
    </property>  
    <property name="password">  
        <value>123456</value>  
    </property>  
</bean> 
転入先:
http://blog.csdn.net/tl396900/article/details/5785716