Tomcat が提供する JNDI DataSource を Spring で使用するにはどうすればよいでしょうか? 質問する

Tomcat が提供する JNDI DataSource を Spring で使用するにはどうすればよいでしょうか? 質問する

DriverManagerDataSourceSpringのjavadocの記事では、このクラスは非常にシンプルで、推奨されていると言われています。

コンテナによって提供されるJNDIデータソースを使用する。このようなものは、Spring ApplicationContextでBeanDataSourceとして公開できます。DataSourceJndiObjectFactoryBean

質問は:これを実現するにはどうすればいいでしょうか?

たとえば、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とSpring 4用に更新されました。Tomcatのプロパティ名がいくつか変更されました。デフォルトデータソース リソース プールのセットアップ。

おすすめ記事