Перехід до GraalVM images та оновлення Spring Boot
Загальний підхід до оновлення
Java
Мінімальна вимога до версії java для spring boot починаючи від версії 3.0 - 17, але оскільки в наступній 21 LTS версії java реалізовано Virtual Threads використання яких додано з версії Spring 6, це може зменшити використання процесорних ресурсів.
Тому цільова версія java для оновлення: 21
Spring boot
Починаючи з spring boot 3.0 підтримується генерація інструкцій для aot-compilation, а з spring boot 3.2 - додається підтримка virtual threads для опрацювання запитів в servlet container та для опрацювання запитів у фоні (Kafka Listeners, Task Scheduling і т.п.)
Тому цільова версія spring boot для оновлення: 3.2
Таким чином тільки оновлення версій має зменшити використання процесорних ресурсів.
Наступним кроком це побудова native image, яке за умов використання spring boot 3.2 відбувається достатньо просто, але має ряд обмежень.
Відомий перелік необхідних змін
Для оновлення версій:
-
Міграція налаштувань в application.yaml.
-
Міграція конфігурацій Spring Security.
-
Міграція запитів jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse.
-
Міграція Spring Cloud Sleuth на Micrometer Tracing.
Для побудови native image:
-
Видалення log4j2 і заміна на logback.
-
Видалення однакових бібліотек різних версій.
Підхід до узгодження версій
Оскільки побудова native image вимагає одноманітних налаштувань декількох плагінів то для зменшення boilerplate коду використовується наслідування від "батьківського" pom.
Сервіси вимагають не тільки узгодженості сторонніх бібліотек та і стартерів які розроблені в рамках платформи для цього створюється платформений "батьківський" проєкт в якому узгоджені бібліотеки і стартери
Оновлення сервісів
Оновлення сервісів складається з міграції стартерів використаних в сервісі відповідно до версії spring boot та java і оновлення налаштувань та коду безпосередньо сервісу. Див: перелік знаних змін
Оновлення бібліотек та сартерів
Версіонування стартерів з використанням spring boot 3.2 відбувається з версії 2.0.0
Для узгодження версій в бібліотеках та стартерах використовується імпорт "батьківського" pom spring boot.
Оцінка складності
На прикладі user-setting-api-service оновлення security та actuator стартерів до можливості компіляції з новими версіями - 1 день
Загальна кількість стартерів - 16
Попередньо стартери які не потребують міграції в конфігурацій:
-
ddm-starter-notifications
-
ddm-starter-localization
-
ddm-starter-database
Оновлення коду сервісу user-setting-api-service - 0.5 дня.
Оптимізація залежностей для компіляції native image user-setting-api-service - 0.5 дня.