Skip to content

Commit 53d6049

Browse files
feat : upgrade to spring boot 4 (#2113)
* feat : upgrade to spring boot 4 * fix : test failures * implement code review comment * implement code review
1 parent 9cf5b49 commit 53d6049

31 files changed

+358
-206
lines changed

.github/workflows/reactive-mongodb-redis-integration.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
runs-on: ubuntu-latest
2020
strategy:
2121
matrix:
22-
java: [ '21' ]
22+
java: [ '25' ]
2323
name: Build on Java ${{ matrix.Java }}
2424
defaults:
2525
run:

poc-mongodb-redis-cache/reactive-mongodb-redis-integration/pom.xml

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.springframework.boot</groupId>
99
<artifactId>spring-boot-starter-parent</artifactId>
10-
<version>3.5.8</version>
10+
<version>4.0.0</version>
1111
<relativePath /> <!-- lookup parent from repository -->
1212
</parent>
1313

@@ -19,8 +19,8 @@
1919
<properties>
2020
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2121
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
22-
<java.version>21</java.version>
23-
<springdoc-open-ui.version>2.8.14</springdoc-open-ui.version>
22+
<java.version>25</java.version>
23+
<springdoc-open-ui.version>3.0.0</springdoc-open-ui.version>
2424

2525
<maven-checkstyle-plugin.version>3.6.0</maven-checkstyle-plugin.version>
2626
<spotless.version>3.1.0</spotless.version>
@@ -79,37 +79,38 @@
7979
<scope>runtime</scope>
8080
<optional>true</optional>
8181
</dependency>
82-
<dependency>
83-
<groupId>org.projectlombok</groupId>
84-
<artifactId>lombok</artifactId>
85-
<optional>true</optional>
86-
</dependency>
8782

8883
<dependency>
8984
<groupId>org.springframework.boot</groupId>
90-
<artifactId>spring-boot-starter-test</artifactId>
85+
<artifactId>spring-boot-starter-webflux-test</artifactId>
9186
<scope>test</scope>
9287
</dependency>
88+
<dependency>
89+
<groupId>org.springframework.boot</groupId>
90+
<artifactId>spring-boot-starter-data-mongodb-reactive-test</artifactId>
91+
<scope>test</scope>
92+
</dependency>
9393
<dependency>
9494
<groupId>org.springframework.boot</groupId>
9595
<artifactId>spring-boot-testcontainers</artifactId>
9696
<scope>test</scope>
9797
</dependency>
98-
<dependency>
99-
<groupId>io.projectreactor</groupId>
100-
<artifactId>reactor-test</artifactId>
101-
<scope>test</scope>
102-
</dependency>
10398
<dependency>
10499
<groupId>org.testcontainers</groupId>
105-
<artifactId>junit-jupiter</artifactId>
100+
<artifactId>testcontainers-junit-jupiter</artifactId>
106101
<scope>test</scope>
107102
</dependency>
108103
<dependency>
109104
<groupId>org.testcontainers</groupId>
110-
<artifactId>mongodb</artifactId>
105+
<artifactId>testcontainers-mongodb</artifactId>
111106
<scope>test</scope>
112107
</dependency>
108+
<dependency>
109+
<groupId>commons-io</groupId>
110+
<artifactId>commons-io</artifactId>
111+
<version>2.21.0</version>
112+
<scope>test</scope>
113+
</dependency>
113114
<dependency>
114115
<groupId>com.redis.testcontainers</groupId>
115116
<artifactId>testcontainers-redis</artifactId>
@@ -129,14 +130,6 @@
129130
<plugin>
130131
<groupId>org.springframework.boot</groupId>
131132
<artifactId>spring-boot-maven-plugin</artifactId>
132-
<configuration>
133-
<excludes>
134-
<exclude>
135-
<groupId>org.projectlombok</groupId>
136-
<artifactId>lombok</artifactId>
137-
</exclude>
138-
</excludes>
139-
</configuration>
140133
</plugin>
141134
<plugin>
142135
<groupId>org.apache.maven.plugins</groupId>
@@ -297,7 +290,7 @@
297290
<configuration>
298291
<java>
299292
<googleJavaFormat>
300-
<version>1.25.2</version>
293+
<version>1.28.0</version>
301294
<style>AOSP</style>
302295
</googleJavaFormat>
303296
<licenseHeader>

poc-mongodb-redis-cache/reactive-mongodb-redis-integration/src/main/java/com/mongodb/redis/integration/config/CustomCacheErrorHandler.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
/* Licensed under Apache-2.0 2021-2023 */
22
package com.mongodb.redis.integration.config;
33

4-
import lombok.extern.slf4j.Slf4j;
4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
56
import org.springframework.cache.Cache;
67
import org.springframework.cache.interceptor.CacheErrorHandler;
78

8-
@Slf4j
99
class CustomCacheErrorHandler implements CacheErrorHandler {
1010

11+
private static final Logger log = LoggerFactory.getLogger(CustomCacheErrorHandler.class);
12+
1113
@Override
1214
public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) {
1315
log.error(

poc-mongodb-redis-cache/reactive-mongodb-redis-integration/src/main/java/com/mongodb/redis/integration/config/RedisCachingConfig.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
import com.mongodb.redis.integration.request.BookDTO;
55
import jakarta.annotation.PreDestroy;
6-
import lombok.RequiredArgsConstructor;
76
import org.springframework.cache.annotation.CachingConfigurer;
87
import org.springframework.cache.annotation.EnableCaching;
98
import org.springframework.cache.interceptor.CacheErrorHandler;
@@ -12,17 +11,20 @@
1211
import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
1312
import org.springframework.data.redis.connection.RedisConnectionFactory;
1413
import org.springframework.data.redis.core.ReactiveRedisTemplate;
15-
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
14+
import org.springframework.data.redis.serializer.JacksonJsonRedisSerializer;
1615
import org.springframework.data.redis.serializer.RedisSerializationContext;
1716
import org.springframework.data.redis.serializer.StringRedisSerializer;
1817

1918
@Configuration(proxyBeanMethods = false)
2019
@EnableCaching
21-
@RequiredArgsConstructor
2220
public class RedisCachingConfig implements CachingConfigurer {
2321

2422
private final RedisConnectionFactory connectionFactory;
2523

24+
public RedisCachingConfig(RedisConnectionFactory connectionFactory) {
25+
this.connectionFactory = connectionFactory;
26+
}
27+
2628
@Bean
2729
@Override
2830
public CacheErrorHandler errorHandler() {
@@ -33,8 +35,8 @@ public CacheErrorHandler errorHandler() {
3335
public ReactiveRedisTemplate<String, BookDTO> reactiveJsonBookRedisTemplate(
3436
ReactiveRedisConnectionFactory reactiveRedisConnectionFactory) {
3537

36-
Jackson2JsonRedisSerializer<BookDTO> serializer =
37-
new Jackson2JsonRedisSerializer<>(BookDTO.class);
38+
JacksonJsonRedisSerializer<BookDTO> serializer =
39+
new JacksonJsonRedisSerializer<>(BookDTO.class);
3840

3941
RedisSerializationContext<String, BookDTO> serializationContext =
4042
RedisSerializationContext.<String, BookDTO>newSerializationContext(
@@ -48,6 +50,8 @@ public ReactiveRedisTemplate<String, BookDTO> reactiveJsonBookRedisTemplate(
4850

4951
@PreDestroy
5052
public void flushTestDb() {
51-
this.connectionFactory.getConnection().flushDb();
53+
try (var connection = this.connectionFactory.getConnection()) {
54+
connection.serverCommands().flushDb();
55+
}
5256
}
5357
}

poc-mongodb-redis-cache/reactive-mongodb-redis-integration/src/main/java/com/mongodb/redis/integration/constants/BookConstants.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
/* Licensed under Apache-2.0 2021-2022 */
22
package com.mongodb.redis.integration.constants;
33

4-
import lombok.experimental.UtilityClass;
5-
6-
@UtilityClass
74
public class BookConstants {
85

96
public static final String BOOKS_END_POINT = "/api/book/";

poc-mongodb-redis-cache/reactive-mongodb-redis-integration/src/main/java/com/mongodb/redis/integration/constants/ItemConstants.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
/* Licensed under Apache-2.0 2021-2022 */
22
package com.mongodb.redis.integration.constants;
33

4-
import lombok.experimental.UtilityClass;
5-
6-
@UtilityClass
74
public class ItemConstants {
85

96
public static final String ITEM_END_POINT_V_1 = "/v1/items";

poc-mongodb-redis-cache/reactive-mongodb-redis-integration/src/main/java/com/mongodb/redis/integration/controller/v1/ItemController.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,24 @@
44
import com.mongodb.redis.integration.constants.ItemConstants;
55
import com.mongodb.redis.integration.document.Item;
66
import com.mongodb.redis.integration.repository.ReactiveItemRepository;
7-
import lombok.RequiredArgsConstructor;
8-
import lombok.extern.slf4j.Slf4j;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
99
import org.springframework.http.HttpStatus;
1010
import org.springframework.http.ResponseEntity;
1111
import org.springframework.web.bind.annotation.*;
1212
import reactor.core.publisher.Flux;
1313
import reactor.core.publisher.Mono;
1414

1515
@RestController
16-
@RequiredArgsConstructor
17-
@Slf4j
1816
public class ItemController {
1917

18+
private static final Logger log = LoggerFactory.getLogger(ItemController.class);
2019
private final ReactiveItemRepository reactiveItemRepository;
2120

21+
public ItemController(ReactiveItemRepository reactiveItemRepository) {
22+
this.reactiveItemRepository = reactiveItemRepository;
23+
}
24+
2225
@GetMapping(ItemConstants.ITEM_END_POINT_V_1)
2326
public Flux<Item> getAllItems() {
2427
return reactiveItemRepository.findAll();

poc-mongodb-redis-cache/reactive-mongodb-redis-integration/src/main/java/com/mongodb/redis/integration/controller/v1/ItemStreamController.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@
44
import com.mongodb.redis.integration.constants.ItemConstants;
55
import com.mongodb.redis.integration.document.ItemCapped;
66
import com.mongodb.redis.integration.repository.ReactiveItemCappedRepository;
7-
import lombok.RequiredArgsConstructor;
87
import org.springframework.http.MediaType;
98
import org.springframework.web.bind.annotation.GetMapping;
109
import org.springframework.web.bind.annotation.RestController;
1110
import reactor.core.publisher.Flux;
1211

1312
@RestController
14-
@RequiredArgsConstructor
1513
public class ItemStreamController {
1614

1715
private final ReactiveItemCappedRepository reactiveItemCappedRepository;
1816

17+
public ItemStreamController(ReactiveItemCappedRepository reactiveItemCappedRepository) {
18+
this.reactiveItemCappedRepository = reactiveItemCappedRepository;
19+
}
20+
1921
@GetMapping(
2022
value = ItemConstants.ITEM_STREAM_END_POINT_V_1,
2123
produces = MediaType.APPLICATION_NDJSON_VALUE)

poc-mongodb-redis-cache/reactive-mongodb-redis-integration/src/main/java/com/mongodb/redis/integration/document/Book.java

Lines changed: 55 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,10 @@
33

44
import java.io.Serial;
55
import java.io.Serializable;
6-
import lombok.AllArgsConstructor;
7-
import lombok.Builder;
8-
import lombok.Getter;
9-
import lombok.NoArgsConstructor;
10-
import lombok.Setter;
11-
import lombok.ToString;
126
import org.springframework.data.annotation.Id;
137
import org.springframework.data.annotation.Version;
148
import org.springframework.data.mongodb.core.index.Indexed;
159

16-
@Setter
17-
@Getter
18-
@Builder
19-
@ToString
20-
@NoArgsConstructor
21-
@AllArgsConstructor
2210
public class Book implements Serializable {
2311

2412
@Serial private static final long serialVersionUID = 1L;
@@ -30,7 +18,62 @@ public class Book implements Serializable {
3018

3119
private String author;
3220

21+
public Book(String bookId, String title, String author, String text, Long version) {
22+
this.bookId = bookId;
23+
this.title = title;
24+
this.author = author;
25+
this.text = text;
26+
this.version = version;
27+
}
28+
29+
public Book() {}
30+
3331
private String text;
3432

3533
@Version private Long version;
34+
35+
public String getBookId() {
36+
return bookId;
37+
}
38+
39+
public Book setBookId(String bookId) {
40+
this.bookId = bookId;
41+
return this;
42+
}
43+
44+
public String getTitle() {
45+
return title;
46+
}
47+
48+
public Book setTitle(String title) {
49+
this.title = title;
50+
return this;
51+
}
52+
53+
public String getAuthor() {
54+
return author;
55+
}
56+
57+
public Book setAuthor(String author) {
58+
this.author = author;
59+
return this;
60+
}
61+
62+
public String getText() {
63+
return text;
64+
}
65+
66+
public Book setText(String text) {
67+
this.text = text;
68+
return this;
69+
}
70+
71+
public Long getVersion() {
72+
return version;
73+
}
74+
75+
public Book setVersion(Long version) {
76+
this.version = version;
77+
return this;
78+
}
3679
}

0 commit comments

Comments
 (0)