Skip to content

Spring Boot 2.5.9 -> 3.5.3, spring-dependency-management 1.0.11 -> 1.1.7 - #2950

Open
ElenaSpb wants to merge 5 commits into
masterfrom
spring-version-update
Open

Spring Boot 2.5.9 -> 3.5.3, spring-dependency-management 1.0.11 -> 1.1.7#2950
ElenaSpb wants to merge 5 commits into
masterfrom
spring-version-update

Conversation

@ElenaSpb

@ElenaSpb ElenaSpb commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

##2757

Обновление до Spring Boot 3.5.3

Миграция бэкенда с Spring Boot 2.5.9 → 3.5.3 (+ spring-dependency-management 1.0.11 → 1.1.7) с переходом на неймспейс jakarta.*.

Основные изменения

Spring Boot 3 / Jakarta

  • Массовая миграция javax.* → jakarta.* по всем model, dto, controller, фильтрам и конфигам (JPA-аннотации, HttpServletResponse, @RolesAllowed и т.д.).
  • Плагин allOpen переключён на jakarta.persistence.*.

Spring Security 6

  • WebSecurityConfigurerAdapter заменён на бин SecurityFilterChain (удалённый в SB3 API).
  • Конфиг переписан на lambda-DSL (csrf {}, authorizeHttpRequests {} и др.).
  • @EnableGlobalMethodSecurity@EnableMethodSecurity.
  • AuthenticationManager теперь берётся из AuthenticationConfiguration.
  • В matcher'ы Swagger добавлены пути springdoc v2 (/swagger-ui/, /v3/api-docs/).

Gradle / сборка

  • Gradle wrapper 7.6.3 → 8.13.
  • KotlinCompile переведён на новый compilerOptions API (jvmTarget = JvmTarget.JVM_17).
  • project.exec {} → providers.exec {}, $buildDir → layout.buildDirectory.
  • task → tasks.register.

Обновление зависимостей

  • Flyway 6.5.5 → 11.8.2 (+ новый обязательный flyway-database-postgresql).
  • springdoc-openapi 1.6.12 → 2.8.6 (springdoc-openapi-ui/-kotlin → springdoc-openapi-starter-webmvc-ui); OpenApiCustomiser → OpenApiCustomizer.
  • Firebase Admin 8.1.0 → 9.9.0, java-jwt 3.10.3 → 4.5.0.
  • AWS SDK BOM 2.17.198 → 2.31.78, google-cloud-storage 1.110.0 → 2.69.0.
  • Testcontainers 1.15.1 → 1.21.3, spring-cloud-contract-wiremock 3.1.1 → 4.3.0, kotlinx-coroutines 1.6.0 → 1.10.1, JUnit 5.3.1 → 5.12.2, okhttp 4.10 → 4.12, caffeine 3.1.8 → 3.2.0, org.json 20210307 → 20250107.
  • Удалён неиспользуемый spring-boot-starter-batch.

Прочее

  • Новый StartupSummaryLogger — при старте печатает сводку по активному профилю и включённым интеграциям (Firebase loader, SSL, cloud/TTS-провайдеры).
  • Обновлены тесты фильтров/репозиториев под новый API.
  • Документация: добавлен CLAUDE.md, README актуализирован (Postgres 16, gradlew).

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown

Gradle Unit and Integration Test Results

417 tests   - 106   417 ✔️  - 104   28s ⏱️ -10s
  84 suites  -   32       0 💤  -     2 
  84 files    -   32       0 ±    0 

Results for commit 05969a6. ± Comparison against base commit 12f9226.

This pull request removes 132 and adds 26 tests. Note that renamed tests count towards both.
com.epam.brn.integration.CloudControllerAwsIT ‑ should get correct signature and policy for S3 upload()
com.epam.brn.integration.CloudControllerAwsIT ‑ should not upload non allowed file by extension file to S3()
com.epam.brn.integration.CloudControllerAwsIT ‑ should upload allowed file to S3()
com.epam.brn.integration.CloudControllerGoogleIT ‑ should get correct URL for upload()
com.epam.brn.integration.ContributorControllerIT ‑ test add contributor()
com.epam.brn.integration.ContributorControllerIT ‑ test get all contributors()
com.epam.brn.integration.ContributorControllerIT ‑ test get contributors by type QA()
com.epam.brn.integration.ContributorControllerIT ‑ test update contributor()
com.epam.brn.integration.CsvLoadingTestIT ‑ should load test data from classpath initFiles folder()
com.epam.brn.integration.DoctorControllerIT ‑ should add patient to doctor()
…
com.epam.brn.service.TaskServiceTest$GetTasks ‑ [1] word=машина
com.epam.brn.service.TaskServiceTest$GetTasks ‑ [1] word=мышка
com.epam.brn.service.TaskServiceTest$GetTasks ‑ [1] word=мышь
com.epam.brn.service.TaskServiceTest$GetTasks ‑ [2] word=королёв
com.epam.brn.service.TaskServiceTest$GetTasks ‑ [2] word=кот
com.epam.brn.service.TaskServiceTest$GetTasks ‑ [2] word=кошка
com.epam.brn.service.TaskServiceTest$GetTasks ‑ [3] word=моошка
com.epam.brn.service.TaskServiceTest$GetTasks ‑ [3] word=муан
com.epam.brn.service.TaskServiceTest$GetTasks ‑ [3] word=смрад
com.epam.brn.service.TaskServiceTest$GetTasks ‑ [4] word=портфель
…

♻️ This comment has been updated with latest results.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR upgrades the project’s Spring/Gradle stack (Spring Boot 2.5.9 → 3.5.3, dependency management plugin, Gradle wrapper) and applies the required Jakarta namespace migrations and related compatibility updates across main and test code.

Changes:

  • Upgrade core build tooling and dependency versions (Gradle 8.13, Spring Boot 3.5.3, Springdoc 2.x, Flyway 11, Testcontainers 1.21, etc.).
  • Migrate javax.* usages to jakarta.* across entities, validation, servlet/filter code, and controllers/security.
  • Align local/test Postgres to v16 and adjust a few JPQL/HQL queries and Spring Security configuration to Spring 6 APIs.

Reviewed changes

Copilot reviewed 81 out of 83 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/test/resources/application.properties Update Testcontainers JDBC Postgres version to 16
src/test/kotlin/com/epam/brn/service/TokenHelperUtilsTest.kt Switch servlet API import to jakarta.servlet
src/test/kotlin/com/epam/brn/integration/repo/ExerciseRepositoryTest.kt Switch JPA imports to jakarta.persistence
src/test/kotlin/com/epam/brn/auth/filter/RememberLastVisitFilterTest.kt Switch servlet API import + HttpMethod call update
src/test/kotlin/com/epam/brn/auth/filter/FirebaseTokenAuthenticationFilterTest.kt Switch servlet API import + HttpMethod call updates
src/main/kotlin/com/epam/brn/webclient/property/GitHubApiClientProperty.kt Remove @ConstructorBinding for Boot 3 properties binding
src/main/kotlin/com/epam/brn/webclient/GitHubApiClient.kt Spring 6 WebClient API update (HttpStatusCode)
src/main/kotlin/com/epam/brn/validator/WithoutPunctuation.kt Switch validation annotation import to jakarta.validation
src/main/kotlin/com/epam/brn/validator/PunctuationValidator.kt Switch validation imports to jakarta.validation
src/main/kotlin/com/epam/brn/upload/csv/subgroup/SubgroupGenericRecordProcessor.kt Switch JPA exception import to jakarta.persistence
src/main/kotlin/com/epam/brn/upload/csv/seriesMatrix/SeriesMatrixRecordProcessor.kt Switch transaction import to jakarta.transaction
src/main/kotlin/com/epam/brn/service/TokenHelperUtils.kt Switch servlet API import to jakarta.servlet
src/main/kotlin/com/epam/brn/service/AudiometryHistoryService.kt Switch transaction import to jakarta.transaction
src/main/kotlin/com/epam/brn/repo/StudyHistoryRepository.kt Adjust JPQL/HQL date/month/year expressions for Hibernate 6
src/main/kotlin/com/epam/brn/model/UserAccount.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/Task.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/SubGroup.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/StudyHistory.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/SinAudiometryResult.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/Signal.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/Series.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/Role.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/Resource.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/Notification.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/Headphones.kt Switch JPA/validation imports to jakarta.*
src/main/kotlin/com/epam/brn/model/GitHubUser.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/ExerciseGroup.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/Exercise.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/Contributor.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/Contact.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/azure/tts/AzureVoiceInfo.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/azure/tts/AzureSpeechStyle.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/AudiometryTask.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/AudiometryHistory.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/model/Audiometry.kt Switch JPA imports to jakarta.persistence
src/main/kotlin/com/epam/brn/job/GitHubContributorRefreshJob.kt Disable scheduled job in dev profile
src/main/kotlin/com/epam/brn/dto/StudyHistoryDto.kt Switch validation import to jakarta.validation
src/main/kotlin/com/epam/brn/dto/SeriesDto.kt Switch validation imports to jakarta.validation
src/main/kotlin/com/epam/brn/dto/response/AudiometryResponse.kt Switch validation import to jakarta.validation
src/main/kotlin/com/epam/brn/dto/request/UserAccountCreateRequest.kt Switch validation imports to jakarta.validation
src/main/kotlin/com/epam/brn/dto/request/UserAccountChangeRequest.kt Switch validation import to jakarta.validation
src/main/kotlin/com/epam/brn/dto/request/SubGroupRequest.kt Switch validation imports to jakarta.validation
src/main/kotlin/com/epam/brn/dto/request/exercise/Phrases.kt Switch validation import to jakarta.validation
src/main/kotlin/com/epam/brn/dto/request/exercise/ExerciseCreateDto.kt Switch validation imports to jakarta.validation
src/main/kotlin/com/epam/brn/dto/request/contributor/ContributorRequest.kt Switch validation imports to jakarta.validation
src/main/kotlin/com/epam/brn/dto/request/contributor/ContactRequest.kt Switch validation imports to jakarta.validation
src/main/kotlin/com/epam/brn/dto/request/AudiometryHistoryRequest.kt Switch validation import to jakarta.validation
src/main/kotlin/com/epam/brn/dto/request/AddPatientToDoctorRequest.kt Switch validation imports to jakarta.validation
src/main/kotlin/com/epam/brn/dto/HeadphonesDto.kt Switch validation import to jakarta.validation
src/main/kotlin/com/epam/brn/dto/ExerciseGroupDto.kt Switch validation import to jakarta.validation
src/main/kotlin/com/epam/brn/controller/UserSubGroupStatisticController.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/UserStatisticControllerV2.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/UserDetailController.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/TaskController.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/SubGroupController.kt Switch @RolesAllowed + @Valid to jakarta.*
src/main/kotlin/com/epam/brn/controller/StudyHistoryControllerV2.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/StudyHistoryController.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/SeriesController.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/RoleController.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/ResourceController.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/GroupController.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/ExerciseController.kt Switch @RolesAllowed + @Valid to jakarta.*
src/main/kotlin/com/epam/brn/controller/DoctorController.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/ContributorController.kt Switch @RolesAllowed + @Valid to jakarta.*
src/main/kotlin/com/epam/brn/controller/CloudController.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/AudiometryHistoryController.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/AudiometryController.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/controller/AudioController.kt Switch @RolesAllowed import to jakarta.annotation
src/main/kotlin/com/epam/brn/config/WebSecurityBasicConfiguration.kt Migrate to SecurityFilterChain + Spring Security 6 DSL
src/main/kotlin/com/epam/brn/config/SwaggerConfig.kt Springdoc 2 API type rename + jakarta @RolesAllowed
src/main/kotlin/com/epam/brn/config/StartupSummaryLogger.kt Add startup configuration summary logger
src/main/kotlin/com/epam/brn/auth/filter/RememberLastVisitFilter.kt Switch servlet API imports to jakarta.servlet
src/main/kotlin/com/epam/brn/auth/filter/FirebaseTokenAuthenticationFilter.kt Switch servlet API imports to jakarta.servlet
gradlew.bat Update Gradle wrapper script for Gradle 8.13
gradlew Update Gradle wrapper script for Gradle 8.13
gradle/wrapper/gradle-wrapper.properties Update wrapper distribution to Gradle 8.13 + timeout
gradle.properties Bump Spring/Gradle ecosystem dependency versions
docker-compose.yml Bump Postgres image to 16
docker-compose-with-secret.yml Bump Postgres image to 16
docker-compose-unit-test.yml Bump Postgres image to 16
docker-compose-run.yml Bump Postgres image to 16
build.gradle.kts Update BOMs/deps + Kotlin compilerOptions + wrapper tasks

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/main/kotlin/com/epam/brn/webclient/GitHubApiClient.kt Outdated
@github-actions

Copy link
Copy Markdown

Frontend test coverage: 72.7% (-0.04% compared to 72.74% on base)

@github-actions

Copy link
Copy Markdown

Frontend test coverage: 72.74% (+0.02% compared to 72.72% on base)

@ElenaSpb ElenaSpb self-assigned this Aug 20, 2026
@github-actions

Copy link
Copy Markdown

Frontend test coverage: 72.7% (+0.00% compared to 72.7% on base)

@github-actions

Copy link
Copy Markdown

Frontend test coverage: 72.72% (-0.02% compared to 72.74% on base)

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 79 out of 81 changed files in this pull request and generated 3 comments.

Suppressed comments (9)

src/test/kotlin/com/epam/brn/auth/filter/RememberLastVisitFilterTest.kt:59

  • HttpMethod is an enum; in Kotlin its name should be accessed as the .name property. Calling .name() is likely to not compile (and is inconsistent with Kotlin enum usage).
    src/test/kotlin/com/epam/brn/auth/filter/FirebaseTokenAuthenticationFilterTest.kt:118
  • HttpMethod is an enum; in Kotlin its name should be accessed as the .name property. Calling .name() is likely to not compile.
    src/test/kotlin/com/epam/brn/auth/filter/FirebaseTokenAuthenticationFilterTest.kt:139
  • HttpMethod is an enum; in Kotlin its name should be accessed as the .name property. Calling .name() is likely to not compile.
    src/test/kotlin/com/epam/brn/auth/filter/FirebaseTokenAuthenticationFilterTest.kt:165
  • HttpMethod is an enum; in Kotlin its name should be accessed as the .name property. Calling .name() is likely to not compile.
    src/test/kotlin/com/epam/brn/auth/filter/FirebaseTokenAuthenticationFilterTest.kt:209
  • HttpMethod is an enum; in Kotlin its name should be accessed as the .name property. Calling .name() is likely to not compile.
    src/test/kotlin/com/epam/brn/auth/filter/FirebaseTokenAuthenticationFilterTest.kt:241
  • HttpMethod is an enum; in Kotlin its name should be accessed as the .name property. Calling .name() is likely to not compile.
    src/test/kotlin/com/epam/brn/auth/filter/FirebaseTokenAuthenticationFilterTest.kt:268
  • HttpMethod is an enum; in Kotlin its name should be accessed as the .name property. Calling .name() is likely to not compile.
    src/test/kotlin/com/epam/brn/auth/filter/FirebaseTokenAuthenticationFilterTest.kt:300
  • HttpMethod is an enum; in Kotlin its name should be accessed as the .name property. Calling .name() is likely to not compile.
    src/test/kotlin/com/epam/brn/auth/filter/FirebaseTokenAuthenticationFilterTest.kt:302
  • HttpMethod is an enum; in Kotlin its name should be accessed as the .name property. Calling .name() is likely to not compile.

Comment thread src/main/kotlin/com/epam/brn/webclient/GitHubApiClient.kt
@sonarqubecloud

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

Frontend test coverage: 72.7% (-0.04% compared to 72.74% on base)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants