Skip to content

Commit cbc822f

Browse files
feature: upgrade to Spring Boot 3.2.5 / Java 17 (jakarta migration, Security 6, DGS/MyBatis bumps)
Co-Authored-By: andrew.zhao <andrewzhao150@gmail.com>
1 parent 1b03279 commit cbc822f

27 files changed

Lines changed: 159 additions & 125 deletions

.github/workflows/gradle.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: Java CI
2+
3+
on:
4+
push:
5+
branches:
6+
- '**'
7+
tags:
8+
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
9+
pull_request:
10+
branches:
11+
- '**'
12+
13+
jobs:
14+
build:
15+
16+
runs-on: ubuntu-latest
17+
18+
steps:
19+
- uses: actions/checkout@v4
20+
- name: Set up JDK 17
21+
uses: actions/setup-java@v4
22+
with:
23+
distribution: zulu
24+
java-version: '17'
25+
- uses: actions/cache@v4
26+
with:
27+
path: |
28+
~/.gradle/caches
29+
~/.gradle/wrapper
30+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
31+
restore-keys: |
32+
${{ runner.os }}-gradle-
33+
- name: Test with Gradle
34+
run: ./gradlew clean test

build.gradle

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
plugins {
2-
id 'org.springframework.boot' version '2.6.3'
3-
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
2+
id 'org.springframework.boot' version '3.2.5'
3+
id 'io.spring.dependency-management' version '1.1.4'
44
id 'java'
5-
id "com.netflix.dgs.codegen" version "5.0.6"
6-
id "com.diffplug.spotless" version "6.2.1"
5+
id "com.netflix.dgs.codegen" version "6.0.3"
6+
id "com.diffplug.spotless" version "6.25.0"
77
}
88

99
version = '0.0.1-SNAPSHOT'
10-
sourceCompatibility = '11'
11-
targetCompatibility = '11'
10+
sourceCompatibility = '17'
11+
targetCompatibility = '17'
1212

1313
spotless {
1414
java {
1515
target project.fileTree(project.rootDir) {
16-
include '**/*.java'
16+
include 'src/**/*.java'
1717
exclude 'build/generated/**/*.*', 'build/generated-examples/**/*.*'
1818
}
1919
googleJavaFormat()
@@ -35,25 +35,26 @@ dependencies {
3535
implementation 'org.springframework.boot:spring-boot-starter-validation'
3636
implementation 'org.springframework.boot:spring-boot-starter-hateoas'
3737
implementation 'org.springframework.boot:spring-boot-starter-security'
38-
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'
39-
implementation 'com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter:4.9.21'
38+
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
39+
implementation(platform('com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:8.1.1'))
40+
implementation 'com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter'
4041
implementation 'org.flywaydb:flyway-core'
41-
implementation 'io.jsonwebtoken:jjwt-api:0.11.2'
42-
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2',
43-
'io.jsonwebtoken:jjwt-jackson:0.11.2'
44-
implementation 'joda-time:joda-time:2.10.13'
45-
implementation 'org.xerial:sqlite-jdbc:3.36.0.3'
42+
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
43+
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5',
44+
'io.jsonwebtoken:jjwt-jackson:0.11.5'
45+
implementation 'joda-time:joda-time:2.12.7'
46+
implementation 'org.xerial:sqlite-jdbc:3.45.3.0'
4647

4748
compileOnly 'org.projectlombok:lombok'
4849
annotationProcessor 'org.projectlombok:lombok'
4950

50-
testImplementation 'io.rest-assured:rest-assured:4.5.1'
51-
testImplementation 'io.rest-assured:json-path:4.5.1'
52-
testImplementation 'io.rest-assured:xml-path:4.5.1'
53-
testImplementation 'io.rest-assured:spring-mock-mvc:4.5.1'
51+
testImplementation 'io.rest-assured:rest-assured:5.4.0'
52+
testImplementation 'io.rest-assured:json-path:5.4.0'
53+
testImplementation 'io.rest-assured:xml-path:5.4.0'
54+
testImplementation 'io.rest-assured:spring-mock-mvc:5.4.0'
5455
testImplementation 'org.springframework.security:spring-security-test'
5556
testImplementation 'org.springframework.boot:spring-boot-starter-test'
56-
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:2.2.2'
57+
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3'
5758
}
5859

5960
tasks.named('test') {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

src/main/java/io/spring/api/ArticleApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
import io.spring.core.article.ArticleRepository;
1111
import io.spring.core.service.AuthorizationService;
1212
import io.spring.core.user.User;
13+
import jakarta.validation.Valid;
1314
import java.util.HashMap;
1415
import java.util.Map;
15-
import javax.validation.Valid;
1616
import lombok.AllArgsConstructor;
1717
import org.springframework.http.ResponseEntity;
1818
import org.springframework.security.core.annotation.AuthenticationPrincipal;

src/main/java/io/spring/api/ArticlesApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
import io.spring.application.article.NewArticleParam;
77
import io.spring.core.article.Article;
88
import io.spring.core.user.User;
9+
import jakarta.validation.Valid;
910
import java.util.HashMap;
10-
import javax.validation.Valid;
1111
import lombok.AllArgsConstructor;
1212
import org.springframework.http.ResponseEntity;
1313
import org.springframework.security.core.annotation.AuthenticationPrincipal;

src/main/java/io/spring/api/CommentsApi.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
import io.spring.core.comment.CommentRepository;
1212
import io.spring.core.service.AuthorizationService;
1313
import io.spring.core.user.User;
14+
import jakarta.validation.Valid;
15+
import jakarta.validation.constraints.NotBlank;
1416
import java.util.HashMap;
1517
import java.util.List;
1618
import java.util.Map;
17-
import javax.validation.Valid;
18-
import javax.validation.constraints.NotBlank;
1919
import lombok.AllArgsConstructor;
2020
import lombok.Getter;
2121
import lombok.NoArgsConstructor;

src/main/java/io/spring/api/CurrentUserApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
import io.spring.application.user.UpdateUserParam;
88
import io.spring.application.user.UserService;
99
import io.spring.core.user.User;
10+
import jakarta.validation.Valid;
1011
import java.util.HashMap;
1112
import java.util.Map;
12-
import javax.validation.Valid;
1313
import lombok.AllArgsConstructor;
1414
import org.springframework.http.ResponseEntity;
1515
import org.springframework.security.core.annotation.AuthenticationPrincipal;

src/main/java/io/spring/api/UsersApi.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
import io.spring.core.service.JwtService;
1313
import io.spring.core.user.User;
1414
import io.spring.core.user.UserRepository;
15+
import jakarta.validation.Valid;
16+
import jakarta.validation.constraints.Email;
17+
import jakarta.validation.constraints.NotBlank;
1518
import java.util.HashMap;
1619
import java.util.Map;
1720
import java.util.Optional;
18-
import javax.validation.Valid;
19-
import javax.validation.constraints.Email;
20-
import javax.validation.constraints.NotBlank;
2121
import lombok.AllArgsConstructor;
2222
import lombok.Getter;
2323
import lombok.NoArgsConstructor;

src/main/java/io/spring/api/exception/CustomizeExceptionHandler.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY;
44

5+
import jakarta.validation.ConstraintViolation;
6+
import jakarta.validation.ConstraintViolationException;
57
import java.util.ArrayList;
68
import java.util.Arrays;
79
import java.util.HashMap;
810
import java.util.List;
911
import java.util.stream.Collectors;
10-
import javax.validation.ConstraintViolation;
11-
import javax.validation.ConstraintViolationException;
1212
import org.springframework.http.HttpHeaders;
13-
import org.springframework.http.HttpStatus;
13+
import org.springframework.http.HttpStatusCode;
1414
import org.springframework.http.MediaType;
1515
import org.springframework.http.ResponseEntity;
1616
import org.springframework.web.bind.MethodArgumentNotValidException;
@@ -63,7 +63,7 @@ public ResponseEntity<Object> handleInvalidAuthentication(
6363
protected ResponseEntity<Object> handleMethodArgumentNotValid(
6464
MethodArgumentNotValidException e,
6565
HttpHeaders headers,
66-
HttpStatus status,
66+
HttpStatusCode status,
6767
WebRequest request) {
6868
List<FieldErrorResource> errorResources =
6969
e.getBindingResult().getFieldErrors().stream()

src/main/java/io/spring/api/security/JwtTokenFilter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
import io.spring.core.service.JwtService;
44
import io.spring.core.user.UserRepository;
5+
import jakarta.servlet.FilterChain;
6+
import jakarta.servlet.ServletException;
7+
import jakarta.servlet.http.HttpServletRequest;
8+
import jakarta.servlet.http.HttpServletResponse;
59
import java.io.IOException;
610
import java.util.Collections;
711
import java.util.Optional;
8-
import javax.servlet.FilterChain;
9-
import javax.servlet.ServletException;
10-
import javax.servlet.http.HttpServletRequest;
11-
import javax.servlet.http.HttpServletResponse;
1212
import org.springframework.beans.factory.annotation.Autowired;
1313
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
1414
import org.springframework.security.core.context.SecurityContextHolder;

0 commit comments

Comments
 (0)