1. ホーム
  2. java

[解決済み] Tomcatが提供するJNDI DataSourceをSpringで使用するには?

2022-04-25 13:36:43

質問

Springのjavadocの記事で、以下のように言われています。 DriverManagerDataSource このクラスは非常にシンプルであり、推奨されるクラスです。

コンテナが提供するJNDI DataSourceを使用することです。このような DataSource として公開することができます。 DataSource を経由して Spring ApplicationContext 内の JndiObjectFactoryBean

という質問です。 どうすれば実現できるのか?

例えば DataSource ビーンを使用して、独自の MySQL データベースにアクセスするには、何が必要ですか?コンテキスト設定に何を書けばいいのか、などなど。

どのように解決するのですか?

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 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の デフォルト データソースリソースプールの設定