技術空間

Spring

SpringJDBCでデータソースをJNDI経由で取得する


TOP > Spring > SpringJDBCでデータソースをJNDI経由で取得する



■JNDI経由での定義方法

SpringJDBCはDriverManager以外にJNDI経由でもデータソースが取得できる。

以下3ファイルに定義が必要。

なお今回はアプリケーションサーバにTomcat、データベースにMySqlを使用する。


Tomcatのserver.xml

まずはアプリケーションサーバにデータソースを作成する。

Tomcatの場合はserver.xmlだが、アプリケーションサーバによって作成の仕方は異なる。今回はTomcatを利用するのでserver.xmlに記述する。(Tomcatでもバージョンが異なると記述方式が変わることがある)

リソース名は「jdbc/TestDB」とする。各種設定値の説明はTomcat固有の仕様のため省略する。

server.xml
<Context docBase="test" path="/test" reloadable="true" source="org.eclipse.jst.jee.server:test">
<Resource name="jdbc/TestDB"
global="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/testdb"
username="username"
password="password"
maxActive="100"
maxIdle="20"
minIdle="5"
maxWait="10000"/>
</Context>

web.xml

次にWEBアプリケーションのweb.xmlにリソース参照の定義を記述する。

リソース参照名はTomcatのリソース名と合わせ「jdbc/TestDB」とする。

web.xml
<resource-ref>
    <res-ref-name>jdbc/TestDB</res-ref-name>
    <res-type>java.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>"/>

Springの設定ファイル

最後に今回の主旨であるSpringの設定ファイルの記述方法。

beanの定義はDAOの実装によって異なる。くわしくはこちらのページ参照。

spring-context.xml
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <-- ①データソースの定義(JNDI経由の場合) -->
    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:comp/env/jdbc/TestDB"/>
    </bean>

    <-- ②beanの定義 -->
    <bean class="test.SampleDao">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

</beans>

なお参考にDriverManagerの場合は以下のように記述する。詳しくはこちらのページ参照。

<-- データソースの定義(DriverManagerの場合) -->
<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://localhost/sampledb" /> 
    <property name="username" value="testuser" />
    <property name="password" value="testpassword" />
</bean>
- Springの入門本 -



TOP > Spring > SpringJDBCでデータソースをJNDI経由で取得する

Tweet ̃Gg[͂ĂȃubN}[Nɒlj
技術空間