Spring Boot 3.2.0 → 3.5.3 バージョンアップ対応(POMまわり)
背景(目的)
Spring Boot を 3.2.0 → 3.5.3 へ上げるにあたり、
特に pom.xml の依存管理(BOM / 直指定ライブラリ) の調整が必要。
- Boot 3.5 系では BOM 管理を徹底することが必須。
→ Spring Cloud や AWS SDK v2 は 専用 BOM を import しないと互換性が崩れる。 - Boot が管理しない外部ライブラリ(MyBatis, BeanUtils, POI, PDFBox, DbUnit 等)は 個別にバージョンを固定して維持するしかない。
- したがって「BOM に寄せる」「starter に統一する」「個別管理継続」の3分類で扱いを整理する。
一覧(Before → After)
| 区分 | 現状(3.2.0) | 3.5.3 対応後 | 理由 | 結論 |
|---|---|---|---|---|
| Parent | spring-boot-starter-parent:3.2.0 | 3.5.3 に更新 | Boot 本体の依存整合性を維持するため | OK(version を上げるだけ) |
| Spring Boot / Security / Data / Jackson / Micrometer / Hikari | starter + version 指定なし | そのまま(starter-parent 経由 BOM 管理) | Boot BOM が管理するため version 指定不要 | OK(変更不要) |
| Spring Cloud | spring-cloud-starter-bootstrap:3.0.1 | BOM import → 2025.0.x (Northfields) に揃える | Boot 3.5 系と互換があるのは Cloud 2025.0.x 系のみ | 必須更新 |
| AWS SDK v2 | s3:2.29.52, sqs:2.29.52 を直指定 | AWS BOM import(2.29.x) → 個別依存の <version> 削除 |
モジュール間で互換性を保つには BOM 管理が必須 | 必須更新 |
| MyBatis | mybatis / mybatis-spring を直指定 | mybatis-spring-boot-starter に統一 | starter に寄せないと Boot 3.5 と依存整合が崩れる可能性 | 必須修正 |
| Commons BeanUtils | commons-beanutils:1.9.4 | Boot 管理外 → 1.10.x に更新検討 | 1.9.4 は既知の脆弱性あり。Boot BOM 管理外 | 個別管理継続(更新推奨) |
| Apache POI / POI-Ooxml | poi:5.2.3, poi-ooxml:5.2.3 | Boot 管理外 → version 指定を残す | Boot BOM 管理外。明示的に固定が必要 | 個別管理継続(CVE チェック要) |
| Apache XMLBeans | xmlbeans:5.3.0 | Boot 管理外 → version 指定を残す | Boot BOM 管理外。明示的に固定が必要 | 個別管理継続(CVE チェック要) |
| Apache PDFBox | pdfbox:2.0.29 | Boot 管理外 → version 指定を残す | Boot BOM 管理外。明示的に固定が必要 | 個別管理継続(CVE チェック要) |
| DbUnit | dbunit:2.7.3 | Boot 管理外 → version 指定を残す | Boot BOM 管理外。明示的に固定が必要 | 個別管理継続(CVE チェック要) |
✅ 結論
-
BOM に寄せるもの
- Spring Boot 系(starter-parent 経由)
- Spring Cloud(2025.0.x BOM)
- AWS SDK v2(
software.amazon.awssdk:bom)
-
starter に統一すべきもの
- MyBatis →
mybatis-spring-boot-starter
- MyBatis →
-
個別管理継続するもの
- Commons BeanUtils(更新推奨)
- POI / PDFBox / XMLBeans / DbUnit(CVE チェックを定期的に実施)
→ 結論として、BOM に寄せられるものは BOM に任せ、Boot 管理外のライブラリは個別に固定+脆弱性監視が必須となる。
修正例(スニペット)
Parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.3</version>
<relativePath/>
</parent>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.3</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>demo-app</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>demo-app</name>
<description>Spring Boot 3.5.3 Migration Example</description>
<properties>
<java.version>17</java.version>
</properties>
<!-- BOM import (Cloud / AWS) -->
<dependencyManagement>
<dependencies>
<!-- Spring Cloud BOM -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2025.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- AWS SDK v2 BOM -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.29.52</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Spring Boot starters -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Cloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- AWS SDK v2 -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sqs</artifactId>
</dependency>
<!-- MyBatis (starter統一) -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!-- Commons BeanUtils (最新版に更新) -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.10.0</version>
</dependency>
<!-- 個別管理ライブラリ -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>5.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.29</version>
</dependency>
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.7.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.3</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>demo-app</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>demo-app</name>
<description>Spring Boot 3.5.3 Migration Example</description>
<properties>
<java.version>17</java.version>
</properties>
<!-- BOM import (Cloud / AWS) -->
<dependencyManagement>
<dependencies>
<!-- Spring Cloud BOM -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2025.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- AWS SDK v2 BOM -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.29.52</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Spring Boot starters -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Cloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- AWS SDK v2 -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sqs</artifactId>
</dependency>
<!-- MyBatis (starter統一) -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<!-- Commons BeanUtils (最新版に更新) -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.10.0</version>
</dependency>
<!-- 個別管理ライブラリ -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>5.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.29</version>
</dependency>
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.7.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
✅ 補足
spring-boot-starter-parent を 3.5.3 に更新 → Boot 系の依存は全部 BOM 管理に任せられる
spring-cloud-dependencies:2025.0.0 を import
software.amazon.awssdk:bom:2.29.52 を import
MyBatis は starter に一本化
BeanUtils は最新版に引き上げ
POI, XMLBeans, PDFBox, DbUnit は Boot 管理外 → 個別指定継続