From e4b78617eaf85aca4bc25015c08301a6aac7cb4e Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 20:37:09 +0000 Subject: [PATCH] Upgrade to Spring Boot 3.3.13 and Spring Cloud 2023.0.6 - Updated all 7 microservice pom.xml files to Spring Boot 3.3.13 and Spring Cloud 2023.0.6 - Migrated javax.persistence imports to jakarta.persistence in entity classes (6 files) - Migrated javax.transaction.Transactional to jakarta.transaction.Transactional in UserServiceImpl - Removed @EnableEurekaClient annotation from 3 Application classes (no longer needed in Spring Cloud 2022.0.0+) - Updated GlobalExceptionHandler method signatures to use HttpStatusCode instead of HttpStatus (3 services) - Added commons-io dependency to Account-Service, Fund-Transfer, and Transaction-Service (required for FeignClientErrorDecoder in Spring Boot 3.x) - All 7 services compile successfully - All tests pass for Service-Registry, Sequence-Generator, and API-Gateway Co-Authored-By: Sam Fertig --- API-Gateway/pom.xml | 4 ++-- .../org/training/api/gateway/ApiGatewayApplication.java | 2 -- Account-Service/pom.xml | 9 +++++++-- .../service/exception/GlobalExceptionHandler.java | 7 ++++--- .../training/account/service/model/entity/Account.java | 2 +- Fund-Transfer/pom.xml | 9 +++++++-- .../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 | 9 +++++++-- .../transactions/TransactionServiceApplication.java | 2 -- .../training/transactions/model/entity/Transaction.java | 2 +- User-Service/pom.xml | 4 ++-- .../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, 55 insertions(+), 42 deletions(-) diff --git a/API-Gateway/pom.xml b/API-Gateway/pom.xml index 3bd9a5d..184da14 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.3.13 org.training @@ -15,7 +15,7 @@ API Gateway 17 - 2021.0.8 + 2023.0.6 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..63a69a0 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.3.13 org.training @@ -15,7 +15,7 @@ Account Service 17 - 2021.0.8 + 2023.0.6 samfert-codeium @@ -43,6 +43,11 @@ org.springframework.cloud spring-cloud-starter-openfeign + + commons-io + commons-io + 2.15.1 + org.springframework.boot 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..9e53140 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) { + 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..efecad8 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.3.13 org.training @@ -15,7 +15,7 @@ Fund Transfer 17 - 2021.0.8 + 2023.0.6 samfert-codeium @@ -64,6 +64,11 @@ org.springframework.cloud spring-cloud-starter-openfeign + + commons-io + commons-io + 2.15.1 + 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..a78cbc0 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.3.13 org.training @@ -15,7 +15,7 @@ Sequence Generator 17 - 2021.0.8 + 2023.0.6 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..615f63f 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.3.13 org.training @@ -15,7 +15,7 @@ Service Registry 17 - 2021.0.8 + 2023.0.6 samfert-codeium diff --git a/Transaction-Service/pom.xml b/Transaction-Service/pom.xml index 83deb58..d9d7ecf 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.3.13 org.training @@ -15,7 +15,7 @@ Transaction Service 17 - 2021.0.8 + 2023.0.6 samfert-codeium @@ -43,6 +43,11 @@ org.springframework.cloud spring-cloud-starter-openfeign + + commons-io + commons-io + 2.15.1 + org.springframework.boot 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..8a1a32e 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.3.13 org.training @@ -15,7 +15,7 @@ User Service 17 - 2021.0.8 + 2023.0.6 samfert-codeium 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;