Міграція Java-додатків на Spring Boot 3: Spring Boot Properties Migrator

Перехід на Spring Boot 3 є значним кроком для будь-якого Java-додатку, оскільки ця версія вносить багато змін, включаючи перехід на Jakarta, оновлення залежностей та зміни в конфігурації. Одним із найкорисніших інструментів для полегшення цього процесу є Spring Boot Properties Migrator — компонент, який автоматично допомагає виявляти застарілі налаштування та пропонує їх сучасні альтернативи.

Що таке Spring Boot Properties Migrator?

Spring Boot Properties Migrator — це спеціальна бібліотека, яка аналізує файли конфігурації вашого додатку (application.properties або application.yml) під час запуску та виявляє:

  • Застарілі властивості (deprecated properties)
  • Властивості, які були видалені
  • Властивості, які були перейменовані
  • Рекомендації щодо заміни старих налаштувань на нові

Інструмент працює в runtime і надає детальні звіти про те, які зміни потрібно внести до вашої конфігурації.

Основні зміни в Spring Boot 3

Перед початком міграції важливо розуміти ключові зміни:

1. Перехід на Jakarta EE

Spring Boot 3 використовує Jakarta EE замість javax.* пакетів. Це означає, що всі імпорти потрібно оновити:

  • javax.servlet.*jakarta.servlet.*
  • javax.persistence.*jakarta.persistence.*
  • javax.validation.*jakarta.validation.*

2. Java 17 як мінімальна версія

Spring Boot 3 вимагає Java 17 або вище.

3. Зміни в властивостях конфігурації

Багато властивостей були перейменовані або видалені для покращення консистентності.

Як використовувати Spring Boot Properties Migrator

Крок 1: Додавання залежності

Додайте Properties Migrator до вашого pom.xml (Maven):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-properties-migrator</artifactId>
    <scope>runtime</scope>
</dependency>
XML

Або до build.gradle (Gradle):

runtime 'org.springframework.boot:spring-boot-properties-migrator'
```

### Крок 2: Запуск додатку

Після додавання залежності запустіть ваш додаток. Properties Migrator автоматично проаналізує конфігураційні файли і виведе попередження в логи.

### Крок 3: Аналіз виводу

В логах ви побачите повідомлення, схожі на ці:
```
WARN : The use of configuration keys that have been renamed was found in the environment:

Property source 'applicationConfig: [classpath:/application.properties]':
	Key: spring.datasource.max-active
		Line: 12
		Replacement: spring.datasource.hikari.maximum-pool-size
		Reason: renamed in Spring Boot 2.0

	Key: server.servlet-path
		Line: 8
		Replacement: spring.mvc.servlet.path
		Reason: renamed for clarity
XSL

Крок 4: Оновлення конфігурації

На основі отриманих рекомендацій оновіть ваші файли конфігурації.

Приклади найпоширеніших змін властивостей

Налаштування сервера

Було:

server.servlet.path=/api
server.context-path=/myapp

Стало:

spring.mvc.servlet.path=/api
server.servlet.context-path=/myapp

Налаштування DataSource

Було:

spring.datasource.max-active=50
spring.datasource.max-idle=10
spring.datasource.min-idle=5

Стало:

spring.datasource.hikari.maximum-pool-size=50
spring.datasource.hikari.minimum-idle=5

Налаштування логування

Було:

logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n

Стало:

logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
# (без змін, але Properties Migrator перевірить)

Actuator endpoints

Було:

management.security.enabled=false

Стало:

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

Покрокова інструкція міграції

1. Підготовка

  • Створіть резервну копію вашого проєкту
  • Переконайтеся, що використовуєте Java 17+
  • Оновіть систему збірки (Maven/Gradle)

2. Оновлення версії Spring Boot

Maven (pom.xml):

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.0</version>
</parent>
XML

Gradle (build.gradle):

plugins {
    id 'org.springframework.boot' version '3.2.0'
}
XSL

3. Оновлення пакетів javax → jakarta

Використайте інструменти IDE або скрипти для масової заміни:

<em># Приклад для Unix/Linux/Mac</em>
find . -type f -name "*.java" -exec sed -i 's/javax.servlet/jakarta.servlet/g' {} +
find . -type f -name "*.java" -exec sed -i 's/javax.persistence/jakarta.persistence/g' {} +
Bash

4. Використання OpenRewrite (опціонально)

OpenRewrite — потужний інструмент для автоматизації міграції:

<plugin>
    <groupId>org.openrewrite.maven</groupId>
    <artifactId>rewrite-maven-plugin</artifactId>
    <version>5.3.0</version>
    <configuration>
        <activeRecipes>
            <recipe>org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0</recipe>
        </activeRecipes>
    </configuration>
</plugin>
XML

Запустіть міграцію:

mvn rewrite:run

5. Тестування

Після внесення змін:

  • Запустіть всі unit-тести
  • Проведіть інтеграційне тестування
  • Перевірте всі критичні функції вручну

Поширені проблеми та їх вирішення

Проблема 1: Невідповідність залежностей

Проблема: Конфлікти версій бібліотек

Рішення: Використовуйте Spring Boot BOM для керування версіями:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>3.2.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
XML

Проблема 2: Застарілі security налаштування

Проблема: SecurityConfiguration не компілюється

Рішення: Оновіть конфігурацію безпеки на новий DSL:

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
        .authorizeHttpRequests(authz -> authz
            .requestMatchers("/public/**").permitAll()
            .anyRequest().authenticated()
        )
        .formLogin(withDefaults());
    return http.build();
}
Java

Проблема 3: Зміни в Spring Data

Деякі методи репозиторіїв були змінені або видалені. Перегляньте документацію Spring Data для конкретних змін.

Коли видаляти Properties Migrator

Properties Migrator слід видалити після завершення міграції, оскільки він призначений лише для перехідного періоду:

  1. Переконайтеся, що всі попередження виправлені
  2. Видаліть залежність з pom.xml або build.gradle
  3. Перезапустіть додаток та переконайтеся, що все працює

Корисні ресурси

І на останок

Spring Boot Properties Migrator значно спрощує процес міграції на Spring Boot 3, автоматично виявляючи застарілі налаштування та пропонуючи їх заміну. Хоча міграція може здатися складною через великі зміни (особливо перехід на Jakarta), систематичний підхід та використання правильних інструментів зроблять цей процес керованим та передбачуваним.

Не забувайте про ретельне тестування на кожному етапі міграції та створення резервних копій перед внесенням значних змін. Після успішної міграції ваш додаток отримає доступ до нових можливостей Spring Boot 3, покращеної продуктивності та довгострокової підтримки.

javaadmin

Супер крутий Dev

Related Posts

Dependency Injection у Spring: пояснюємо на пальцях

Коли програміст-початківець вперше відкриває документацію до Spring Framework, на нього одразу висипається купа грізних термінів: Dependency Injection (DI), Inversion of Control (IoC), ApplicationContext, Bean. Здається, що це вища математика. Ми вже розглядали DI в минулих матеріалах але цю дуже не просту тему краще розібрати по болтиках для повного розуміння. Насправді за цими розумними словами ховається надзвичайно проста та красива ідея. Це історія про те, як перестати збирати складні речі вручну й довірити…

Java Collections Framework: List, Set чи Map?

Уявіть, що ви прийшли на склад інтернет-магазину. На одній полиці товари лежать строго в тому порядку, у якому їх привезли. На іншій — кожен предмет унікальний, і дублікати сюди не кладуть за жодних умов. А в кутку стоїть картотека, де кожному товару відповідає унікальний штрих-код. У світі Java цей склад називається Java Collections Framework (JCF). Це потужний набір інтерфейсів та класів, який дозволяє ефективно керувати групами об’єктів. Проте у…

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Цікаве

Dependency Injection у Spring: пояснюємо на пальцях

  • Автор javaadmin
  • 31 Липня, 2026
  • 16 views
Dependency Injection у Spring: пояснюємо на пальцях

Java Collections Framework: List, Set чи Map?

  • Автор javaadmin
  • 31 Липня, 2026
  • 30 views
Java Collections Framework: List, Set чи Map?

Оптимізуємо це: GraalVM Native Image, Leyden та CRaC

  • Автор javaadmin
  • 17 Липня, 2026
  • 58 views
Оптимізуємо це: GraalVM Native Image, Leyden та CRaC

JBang: Як вивчати Java легко

  • Автор javaadmin
  • 12 Травня, 2026
  • 132 views
JBang: Як вивчати Java легко

Agent Skills: Що це таке і чому про це варто знати

  • Автор javaadmin
  • 13 Квітня, 2026
  • 235 views
Agent Skills: Що це таке і чому про це варто знати

Dependency Injection в Java

  • Автор javaadmin
  • 9 Грудня, 2025
  • 408 views
Dependency Injection в Java