DriverManagerDataSource
Springのjavadocの記事では、このクラスは非常にシンプルで、推奨されていると言われています。
コンテナによって提供されるJNDIデータソースを使用する。このようなものは、Spring ApplicationContextでBean
DataSource
として公開できます。DataSource
JndiObjectFactoryBean
質問は:これを実現するにはどうすればいいでしょうか?
たとえば、DataSource
カスタム MySQL データベースにアクセスするための Bean が必要な場合、何が必要になりますか? コンテキスト構成などに何を記述すればよいでしょうか?
ベストアンサー1
Spring の XML スキーマ ベースの構成を使用する場合は、Spring コンテキストで次のように設定します。
<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.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd">
...
<jee:jndi-lookup id="dbDataSource"
jndi-name="jdbc/DatabaseName"
expected-type="javax.sql.DataSource" />
あるいは、次のような単純な Bean 構成を使用してセットアップします。
<bean id="DatabaseName" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/DatabaseName"/>
</bean>
次のようにして、Tomcat の server.xml で JNDI リソースを宣言できます。
<GlobalNamingResources>
<Resource name="jdbc/DatabaseName"
auth="Container"
type="javax.sql.DataSource"
username="dbUser"
password="dbPassword"
url="jdbc:postgresql://localhost/dbname"
driverClassName="org.postgresql.Driver"
initialSize="20"
maxWaitMillis="15000"
maxTotal="75"
maxIdle="20"
maxAge="7200000"
testOnBorrow="true"
validationQuery="select 1"
/>
</GlobalNamingResources>
そして、次のように Tomcat の Web context.xml から JNDI リソースを参照します。
<ResourceLink name="jdbc/DatabaseName"
global="jdbc/DatabaseName"
type="javax.sql.DataSource"/>
参照ドキュメント:
- Tomcat 8 JNDI データソースの使い方
- Tomcat 8 コンテキスト リソース リンク リファレンス
- Spring 4 JEE JNDI ルックアップ XML スキーマ リファレンス
- Spring 4 JndiObjectFactoryBean Javadoc
編集:この回答はTomcat 8とSpring 4用に更新されました。Tomcatのプロパティ名がいくつか変更されました。デフォルトデータソース リソース プールのセットアップ。