From 768393e6ef32f133083592a6eab5046f672b05ef Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 3 Dec 2025 20:37:54 +0000 Subject: [PATCH] Upgrade to Spring Boot 3.4.0 and Spring Cloud 2024.0.0 - Update all 7 services to Spring Boot 3.4.0 (from 2.7.x) - Update Spring Cloud to 2024.0.0 (from 2021.0.8) - Update Keycloak admin client to 26.0.0 (from 21.0.1) - Migrate javax.* imports to jakarta.* namespace (JPA, transactions) - Remove deprecated @EnableEurekaClient annotations - Update GlobalExceptionHandler method signatures for Spring Boot 3.x API changes (HttpStatus -> HttpStatusCode) Co-Authored-By: Sam Fertig --- API-Gateway/pom.xml | 4 ++-- .../org/training/api/gateway/ApiGatewayApplication.java | 2 -- Account-Service/pom.xml | 4 ++-- .../service/exception/GlobalExceptionHandler.java | 9 +++++---- .../training/account/service/model/entity/Account.java | 2 +- Fund-Transfer/pom.xml | 4 ++-- .../fundtransfer/exception/GlobalExceptionHandler.java | 6 ++++-- .../training/fundtransfer/model/entity/FundTransfer.java | 4 ++-- Sequence-Generator/pom.xml | 4 ++-- .../sequence/generator/model/entity/Sequence.java | 8 ++++---- Service-Registry/pom.xml | 4 ++-- Transaction-Service/pom.xml | 4 ++-- .../transactions/TransactionServiceApplication.java | 2 -- .../training/transactions/model/entity/Transaction.java | 2 +- User-Service/pom.xml | 6 +++--- .../training/user/service/UserServiceApplication.java | 2 -- .../user/service/exception/GlobalExceptionHandler.java | 5 +++-- .../org/training/user/service/model/entity/User.java | 4 ++-- .../training/user/service/model/entity/UserProfile.java | 8 ++++---- .../service/service/implementation/UserServiceImpl.java | 2 +- 20 files changed, 42 insertions(+), 44 deletions(-) diff --git a/API-Gateway/pom.xml b/API-Gateway/pom.xml index 3bd9a5d..88bc159 100644 --- a/API-Gateway/pom.xml +++ b/API-Gateway/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.14 + 3.4.0 org.training @@ -15,7 +15,7 @@ API Gateway 17 - 2021.0.8 + 2024.0.0 samfert-codeium diff --git a/API-Gateway/src/main/java/org/training/api/gateway/ApiGatewayApplication.java b/API-Gateway/src/main/java/org/training/api/gateway/ApiGatewayApplication.java index 5d16c71..5c7a3ef 100644 --- a/API-Gateway/src/main/java/org/training/api/gateway/ApiGatewayApplication.java +++ b/API-Gateway/src/main/java/org/training/api/gateway/ApiGatewayApplication.java @@ -2,10 +2,8 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication -@EnableEurekaClient public class ApiGatewayApplication { public static void main(String[] args) { diff --git a/Account-Service/pom.xml b/Account-Service/pom.xml index 759bf48..9f54830 100644 --- a/Account-Service/pom.xml +++ b/Account-Service/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.15 + 3.4.0 org.training @@ -15,7 +15,7 @@ Account Service 17 - 2021.0.8 + 2024.0.0 samfert-codeium diff --git a/Account-Service/src/main/java/org/training/account/service/exception/GlobalExceptionHandler.java b/Account-Service/src/main/java/org/training/account/service/exception/GlobalExceptionHandler.java index ac70343..b097834 100644 --- a/Account-Service/src/main/java/org/training/account/service/exception/GlobalExceptionHandler.java +++ b/Account-Service/src/main/java/org/training/account/service/exception/GlobalExceptionHandler.java @@ -3,6 +3,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -27,13 +28,13 @@ public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { * * @param ex The MethodArgumentNotValidException that occurred. * @param headers The HttpHeaders of the response. - * @param status The HttpStatus of the response. + * @param status The HttpStatusCode of the response. * @param request The WebRequest of the response. * @return A ResponseEntity with an ErrorResponse and HttpStatus.BAD_REQUEST. */ @Override - public ResponseEntity handleMethodArgumentNotValid( - MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { + protected ResponseEntity handleMethodArgumentNotValid( + MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return new ResponseEntity<>(new ErrorResponse(badRequest, ex.getLocalizedMessage()), HttpStatus.BAD_REQUEST); } @@ -53,4 +54,4 @@ public ResponseEntity handleGlobalException(GlobalException globalExcept .message(globalException.getErrorMessage()) .build()); } -} \ No newline at end of file +} diff --git a/Account-Service/src/main/java/org/training/account/service/model/entity/Account.java b/Account-Service/src/main/java/org/training/account/service/model/entity/Account.java index 19f9532..dd311bd 100644 --- a/Account-Service/src/main/java/org/training/account/service/model/entity/Account.java +++ b/Account-Service/src/main/java/org/training/account/service/model/entity/Account.java @@ -8,7 +8,7 @@ import org.training.account.service.model.AccountStatus; import org.training.account.service.model.AccountType; -import javax.persistence.*; +import jakarta.persistence.*; import java.math.BigDecimal; import java.time.LocalDate; diff --git a/Fund-Transfer/pom.xml b/Fund-Transfer/pom.xml index d6abb65..fb92fa7 100644 --- a/Fund-Transfer/pom.xml +++ b/Fund-Transfer/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.14 + 3.4.0 org.training @@ -15,7 +15,7 @@ Fund Transfer 17 - 2021.0.8 + 2024.0.0 samfert-codeium diff --git a/Fund-Transfer/src/main/java/org/training/fundtransfer/exception/GlobalExceptionHandler.java b/Fund-Transfer/src/main/java/org/training/fundtransfer/exception/GlobalExceptionHandler.java index eb5b9f8..8fe7a8b 100644 --- a/Fund-Transfer/src/main/java/org/training/fundtransfer/exception/GlobalExceptionHandler.java +++ b/Fund-Transfer/src/main/java/org/training/fundtransfer/exception/GlobalExceptionHandler.java @@ -3,6 +3,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -21,12 +22,13 @@ public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { * * @param ex The MethodArgumentNotValidException to handle. * @param headers The HttpHeaders to include in the response. - * @param status The HttpStatus to set in the response. + * @param status The HttpStatusCode to set in the response. * @param request The WebRequest associated with the request. * @return A ResponseEntity containing an ErrorResponse and HttpStatus.BAD_REQUEST. */ + @Override protected ResponseEntity handleMethodArgumentNotValid( - MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { + MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return new ResponseEntity<>(new ErrorResponse(badRequest, ex.getLocalizedMessage()), HttpStatus.BAD_REQUEST); } diff --git a/Fund-Transfer/src/main/java/org/training/fundtransfer/model/entity/FundTransfer.java b/Fund-Transfer/src/main/java/org/training/fundtransfer/model/entity/FundTransfer.java index eff0c47..ee84d35 100644 --- a/Fund-Transfer/src/main/java/org/training/fundtransfer/model/entity/FundTransfer.java +++ b/Fund-Transfer/src/main/java/org/training/fundtransfer/model/entity/FundTransfer.java @@ -8,7 +8,7 @@ import org.training.fundtransfer.model.TransactionStatus; import org.training.fundtransfer.model.TransferType; -import javax.persistence.*; +import jakarta.persistence.*; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -39,4 +39,4 @@ public class FundTransfer { @CreationTimestamp private LocalDateTime transferredOn; -} \ No newline at end of file +} diff --git a/Sequence-Generator/pom.xml b/Sequence-Generator/pom.xml index b77a1ed..e3d881b 100644 --- a/Sequence-Generator/pom.xml +++ b/Sequence-Generator/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.15 + 3.4.0 org.training @@ -15,7 +15,7 @@ Sequence Generator 17 - 2021.0.8 + 2024.0.0 samfert-codeium diff --git a/Sequence-Generator/src/main/java/org/training/sequence/generator/model/entity/Sequence.java b/Sequence-Generator/src/main/java/org/training/sequence/generator/model/entity/Sequence.java index 94e8170..3cf700f 100644 --- a/Sequence-Generator/src/main/java/org/training/sequence/generator/model/entity/Sequence.java +++ b/Sequence-Generator/src/main/java/org/training/sequence/generator/model/entity/Sequence.java @@ -5,10 +5,10 @@ import lombok.Data; import lombok.NoArgsConstructor; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; @Entity @Data diff --git a/Service-Registry/pom.xml b/Service-Registry/pom.xml index 1e47bea..62849ae 100644 --- a/Service-Registry/pom.xml +++ b/Service-Registry/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.14 + 3.4.0 org.training @@ -15,7 +15,7 @@ Service Registry 17 - 2021.0.8 + 2024.0.0 samfert-codeium diff --git a/Transaction-Service/pom.xml b/Transaction-Service/pom.xml index 83deb58..3d8d5ef 100644 --- a/Transaction-Service/pom.xml +++ b/Transaction-Service/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.15 + 3.4.0 org.training @@ -15,7 +15,7 @@ Transaction Service 17 - 2021.0.8 + 2024.0.0 samfert-codeium diff --git a/Transaction-Service/src/main/java/org/training/transactions/TransactionServiceApplication.java b/Transaction-Service/src/main/java/org/training/transactions/TransactionServiceApplication.java index a729304..d2a4512 100644 --- a/Transaction-Service/src/main/java/org/training/transactions/TransactionServiceApplication.java +++ b/Transaction-Service/src/main/java/org/training/transactions/TransactionServiceApplication.java @@ -2,12 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableFeignClients -@EnableEurekaClient public class TransactionServiceApplication { public static void main(String[] args) { diff --git a/Transaction-Service/src/main/java/org/training/transactions/model/entity/Transaction.java b/Transaction-Service/src/main/java/org/training/transactions/model/entity/Transaction.java index fe0f837..2e0f640 100644 --- a/Transaction-Service/src/main/java/org/training/transactions/model/entity/Transaction.java +++ b/Transaction-Service/src/main/java/org/training/transactions/model/entity/Transaction.java @@ -8,7 +8,7 @@ import org.training.transactions.model.TransactionStatus; import org.training.transactions.model.TransactionType; -import javax.persistence.*; +import jakarta.persistence.*; import java.math.BigDecimal; import java.time.LocalDateTime; diff --git a/User-Service/pom.xml b/User-Service/pom.xml index 002edc5..e6bf18c 100644 --- a/User-Service/pom.xml +++ b/User-Service/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.14 + 3.4.0 org.training @@ -15,7 +15,7 @@ User Service 17 - 2021.0.8 + 2024.0.0 samfert-codeium @@ -70,7 +70,7 @@ org.keycloak keycloak-admin-client - 21.0.1 + 26.0.0 org.springframework.cloud diff --git a/User-Service/src/main/java/org/training/user/service/UserServiceApplication.java b/User-Service/src/main/java/org/training/user/service/UserServiceApplication.java index 70d2cbf..adf4771 100644 --- a/User-Service/src/main/java/org/training/user/service/UserServiceApplication.java +++ b/User-Service/src/main/java/org/training/user/service/UserServiceApplication.java @@ -2,12 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableFeignClients -@EnableEurekaClient public class UserServiceApplication { public static void main(String[] args) { diff --git a/User-Service/src/main/java/org/training/user/service/exception/GlobalExceptionHandler.java b/User-Service/src/main/java/org/training/user/service/exception/GlobalExceptionHandler.java index 6b555af..357ce5b 100644 --- a/User-Service/src/main/java/org/training/user/service/exception/GlobalExceptionHandler.java +++ b/User-Service/src/main/java/org/training/user/service/exception/GlobalExceptionHandler.java @@ -3,6 +3,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -27,12 +28,12 @@ public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { * * @param ex The MethodArgumentNotValidException that was thrown. * @param headers The HttpHeaders object for the response. - * @param status The HttpStatus for the response. + * @param status The HttpStatusCode for the response. * @param request The WebRequest object for the response. * @return A ResponseEntity containing an ErrorResponse object with the error code and localized message, and the HTTP status code. */ @Override - protected ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { + protected ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return new ResponseEntity<>(new ErrorResponse(errorCodeBadRequest, ex.getLocalizedMessage()), HttpStatus.BAD_REQUEST); } diff --git a/User-Service/src/main/java/org/training/user/service/model/entity/User.java b/User-Service/src/main/java/org/training/user/service/model/entity/User.java index cf0de9c..d10f342 100644 --- a/User-Service/src/main/java/org/training/user/service/model/entity/User.java +++ b/User-Service/src/main/java/org/training/user/service/model/entity/User.java @@ -7,7 +7,7 @@ import org.hibernate.annotations.CreationTimestamp; import org.training.user.service.model.Status; -import javax.persistence.*; +import jakarta.persistence.*; import java.time.LocalDate; @Entity @@ -38,4 +38,4 @@ public class User { @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "user_profile_id", referencedColumnName = "userProfileId") private UserProfile userProfile; -} \ No newline at end of file +} diff --git a/User-Service/src/main/java/org/training/user/service/model/entity/UserProfile.java b/User-Service/src/main/java/org/training/user/service/model/entity/UserProfile.java index e0a983f..f317bf3 100644 --- a/User-Service/src/main/java/org/training/user/service/model/entity/UserProfile.java +++ b/User-Service/src/main/java/org/training/user/service/model/entity/UserProfile.java @@ -5,10 +5,10 @@ import lombok.Data; import lombok.NoArgsConstructor; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; @Entity @Data diff --git a/User-Service/src/main/java/org/training/user/service/service/implementation/UserServiceImpl.java b/User-Service/src/main/java/org/training/user/service/service/implementation/UserServiceImpl.java index 7e416ba..8cbfcf4 100644 --- a/User-Service/src/main/java/org/training/user/service/service/implementation/UserServiceImpl.java +++ b/User-Service/src/main/java/org/training/user/service/service/implementation/UserServiceImpl.java @@ -27,7 +27,7 @@ import org.training.user.service.service.UserService; import org.training.user.service.utils.FieldChecker; -import javax.transaction.Transactional; +import jakarta.transaction.Transactional; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors;