Міграція 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

Робота з базами даних у Spring: порівнюємо JDBC, Hibernate та Spring Data JPA

Робота з базами даних — одна з найважливіших складових практично будь-якого backend-застосунку. Spring пропонує кілька рівнів абстракції для доступу до даних: низькорівневий Spring JDBC, потужний ORM-фреймворк Hibernate та зручну надбудову Spring Data JPA. Розглянемо, чим вони відрізняються, коли варто обирати кожен з них. 1. Spring JDBC Spring JDBC — це тонка обгортка над стандартним java.sql, яка усуває бойлерплейт-код: ручне відкриття/закриття з’єднань, обробку виключень, керування транзакціями. Основний інструмент — клас JdbcTemplate: Переваги: Недоліки: Spring JDBC…

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

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

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

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

Цікаве

Garbage Collection: Як працює сміттевоз в Java

  • Автор javaadmin
  • 13 Серпня, 2026
  • 123 views
Garbage Collection: Як працює сміттевоз в Java

Робота з базами даних у Spring: порівнюємо JDBC, Hibernate та Spring Data JPA

  • Автор javaadmin
  • 6 Серпня, 2026
  • 133 views
Робота з базами даних у Spring: порівнюємо JDBC, Hibernate та Spring Data JPA

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

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

Java Collections Framework: List, Set чи Map?

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

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

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

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

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