Open Libertyで作成・管理されているDataSourceをSpring BootからJNDIで参照してデータベース操作に利用する方法を解説します。
本記事で使用するコンポーネント
コンポーネント名 | バージョン |
---|---|
JDK | OpenJDK 17.0.8 (IBM Semeru Runtime Open Edition) |
Open Liberty | 23.0.0.10 |
Spring Boot | 3.1.5 |
$ java -version
openjdk version "17.0.8" 2023-07-18
IBM Semeru Runtime Open Edition 17.0.8.0 (build 17.0.8+7)
Eclipse OpenJ9 VM 17.0.8.0 (build openj9-0.40.0, JRE 17 Mac OS X amd64-64-Bit Compressed References 20230718_503 (JIT enabled, AOT enabled)
OpenJ9 - d12d10c9e
OMR - e80bff83b
JCL - 77b0f754805 based on jdk-17.0.8+7)
Open Libertyの設定
server.xml
に以下のフィーチャーを宣言します。
-
jdbc-4.3
... DataSourceの作成・管理に必要なフィーチャー -
jndi-1.0
... Open Libertyで管理されたインスタンスをJNDIで参照するためのフィーチャー
また、DataSourceはSpring BootからDataSourceを参照する際に指定するJNDI名を含めて <dataSource jndiName="{JNDI名}" ... />
と定義します。
<?xml version="1.0" encoding="UTF-8"?>
<server description="Spring Boot WebApp on Open Liberty">
<!-- Features -->
<featureManager>
<feature>servlet-6.0</feature>
<feature>jdbc-4.3</feature>
<feature>jndi-1.0</feature>
</featureManager>
<!-- ...中略... -->
<!-- JDBC Driver -->
<library id="jdbcLib">
<fileset dir="jdbc" includes="*.jar"/>
</library>
<!-- DataSource -->
<dataSource jndiName="jdbc/defaultDS" type="javax.sql.DataSource">
<jdbcDriver libraryRef="jdbcLib"/>
<properties.postgresql serverName="localhost" portNumber="5432"
databaseName="sampledb"
user="sampleuser" password="*****"/>
</dataSource>
</server>
Spring Bootの設定
Open Libertyの server.xml
で定義したJNDI名をSpring Bootの spring.datasource.jndi-name
プロパティに指定します。
spring.datasource.jndi-name=jdbc/defaultDS
Open Libertyでは server.xml
で定義した jndiName
のとおり指定してください。
プレフィックス付きのJNDI名 (java:...
) や、名前空間を含めたJNDI名 (java:comp/env/...
) を指定するとエラーが発生する場合があります。
参考リンク
以上。