Skip to content

Commit 3a21160

Browse files
committed
Update to lastest spring native v0.10.1 and spring boot v2.5.2
1 parent e8bf2a1 commit 3a21160

File tree

10 files changed

+40
-47
lines changed

10 files changed

+40
-47
lines changed

README.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ Both JVM based application and [Graal Native Image] is supported.
1616
>1. [Spring-Boot 2.3: Java-11 version](https://github.com/RawSanj/spring-redis-websocket/tree/spring-boot-web-2.3)
1717
>2. [Spring-Boot 1.5: Java-8 version](https://github.com/RawSanj/spring-redis-websocket/tree/spring-boot-1.5.x)
1818
19+
> The reactive spring-boot 2.4.6 based spring-redis-websocket application can be found in below:
20+
>1. [Spring-Boot 2.4.6: Java-11 Reactive JVM & Graal Native version](https://github.com/RawSanj/spring-redis-websocket/tree/spring-boot-webflux-graal-native-2.4.6)
21+
1922
### Deploy to Play-with-Docker
2023

2124
Ctrl + Click this button to deploy multiple instances of the spring-redis-websocket load balanced by NGINX:
@@ -40,7 +43,7 @@ Hence, this application is configured to use GraalVM native image tracing agent
4043
1. To run integration test which uses [Redis TestContainers](https://www.testcontainers.org/supported_docker_environment) so [Docker] should be configured properly to run [Testcontainers]
4144
2. You also need to install [GraalVM JDK](https://github.com/graalvm/graalvm-ce-builds/releases/tag/vm-21.0.0.2) and [native-image](https://www.graalvm.org/reference-manual/native-image) component:
4245
```sh
43-
$ sdk install java 21.0.0.2.r11-grl # Using [SDKMAN](https://sdkman.io/jdks) install GraalVM distribution of JDK
46+
$ sdk install java 21.1.0.r11-grl # Using [SDKMAN](https://sdkman.io/jdks) install GraalVM distribution of JDK
4447

4548
$ gu install native-image # Then install [native-image](https://www.graalvm.org/reference-manual/native-image) component
4649
```
@@ -99,9 +102,9 @@ $ mvn -Pnative clean spring-boot:build-image
99102
Run docker image:
100103

101104
```sh
102-
$ docker run -d -p 8080:8080 rawsanj/spring-redis-websocket:2.4.6-webflux # JVM based Docker Image
105+
$ docker run -d -p 8080:8080 rawsanj/spring-redis-websocket:2.5.2-webflux # JVM based Docker Image
103106

104-
$ docker run -d -p 8080:8080 rawsanj/spring-redis-websocket:2.4.6-native # Graal Native Image based Docker Image
107+
$ docker run -d -p 8080:8080 rawsanj/spring-redis-websocket:2.5.2-native # Graal Native Image based Docker Image
105108
```
106109

107110
#### Run multiple instances using docker-compose locally

pom.xml

Lines changed: 19 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>com.github.rawsanj</groupId>
77
<artifactId>spring-redis-websocket</artifactId>
8-
<version>2.4.6</version>
8+
<version>2.5.2</version>
99
<packaging>jar</packaging>
1010

1111
<name>spring-redis-websocket</name>
@@ -14,19 +14,15 @@
1414
<parent>
1515
<groupId>org.springframework.boot</groupId>
1616
<artifactId>spring-boot-starter-parent</artifactId>
17-
<version>2.4.6</version>
17+
<version>2.5.2</version>
1818
<relativePath/> <!-- lookup parent from repository -->
1919
</parent>
2020

2121
<properties>
2222
<java.version>11</java.version>
2323
<registry.image.name>rawsanj/spring-redis-websocket</registry.image.name>
24-
<start-class>
25-
com.github.rawsanj.SpringRedisWebSocketApplication
26-
</start-class>
2724
<skipNativeImage>true</skipNativeImage>
28-
<spring-native.version>0.9.2</spring-native.version>
29-
<testcontainers.version>1.15.2</testcontainers.version>
25+
<testcontainers.version>1.15.3</testcontainers.version>
3026
</properties>
3127

3228
<dependencies>
@@ -63,7 +59,7 @@
6359
<artifactId>spring-boot-starter-test</artifactId>
6460
<scope>test</scope>
6561
</dependency>
66-
62+
6763
<dependency>
6864
<groupId>io.projectreactor</groupId>
6965
<artifactId>reactor-test</artifactId>
@@ -129,6 +125,11 @@
129125
<profile>
130126
<id>native</id>
131127

128+
<properties>
129+
<skipNativeImage>true</skipNativeImage>
130+
<spring-native.version>0.10.1</spring-native.version>
131+
</properties>
132+
132133
<dependencies>
133134
<!--Graal Native Image Dependencies-->
134135
<dependency>
@@ -140,45 +141,28 @@
140141

141142
<build>
142143
<plugins>
143-
<plugin>
144-
<artifactId>maven-antrun-plugin</artifactId>
145-
<executions>
146-
<execution>
147-
<id>make-native-image-config-folder</id>
148-
<phase>test-compile</phase>
149-
<configuration>
150-
<target>
151-
<mkdir dir="target/classes/META-INF/native-image"/>
152-
</target>
153-
</configuration>
154-
<goals>
155-
<goal>run</goal>
156-
</goals>
157-
</execution>
158-
</executions>
159-
</plugin>
160144
<plugin>
161145
<groupId>org.apache.maven.plugins</groupId>
162146
<artifactId>maven-surefire-plugin</artifactId>
163147
<configuration>
164148
<argLine>
165-
-Dorg.graalvm.nativeimage.imagecode=agent -Dspring.xml.ignore=true
166-
-Dspring.spel.ignore=true
167-
-agentlib:native-image-agent=access-filter-file=target/classes/access-filter.json,config-merge-dir=target/classes/META-INF/native-image
149+
-DspringAot=true -agentlib:native-image-agent=access-filter-file=target/classes/access-filter.json,config-merge-dir=target/classes/META-INF/native-image
168150
</argLine>
169151
<includes>
170-
<include>**/SpringRedisWebSocketApplicationIT.java</include>
152+
<!-- <include>**/SpringRedisWebSocketApplicationIT.java</include>-->
171153
</includes>
172154
</configuration>
173155
</plugin>
174156
<plugin>
175-
<groupId>org.graalvm.nativeimage</groupId>
176-
<artifactId>native-image-maven-plugin</artifactId>
177-
<version>21.0.0.2</version>
157+
<groupId>org.graalvm.buildtools</groupId>
158+
<artifactId>native-maven-plugin</artifactId>
159+
<version>0.9.0</version>
178160
<configuration>
179161
<mainClass>com.github.rawsanj.SpringRedisWebSocketApplication</mainClass>
180162
<imageName>${project.artifactId}</imageName>
181163
<buildArgs>
164+
-DspringAot=true
165+
-Dspring.xml.ignore=true
182166
-Dspring.spel.ignore=true
183167
-Dspring.native.remove-yaml-support=true
184168
</buildArgs>
@@ -187,7 +171,7 @@
187171
<executions>
188172
<execution>
189173
<goals>
190-
<goal>native-image</goal>
174+
<goal>build</goal>
191175
</goals>
192176
<phase>package</phase>
193177
</execution>
@@ -204,6 +188,8 @@
204188
<env>
205189
<BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE>
206190
<BP_BOOT_NATIVE_IMAGE_BUILD_ARGUMENTS>
191+
-DspringAot=true
192+
-Dspring.xml.ignore=true
207193
-Dspring.spel.ignore=true
208194
-Dspring.native.remove-yaml-support=true
209195
</BP_BOOT_NATIVE_IMAGE_BUILD_ARGUMENTS>
@@ -215,9 +201,6 @@
215201
<groupId>org.springframework.experimental</groupId>
216202
<artifactId>spring-aot-maven-plugin</artifactId>
217203
<version>${spring-native.version}</version>
218-
<configuration>
219-
<mode>native-agent</mode>
220-
</configuration>
221204
<executions>
222205
<execution>
223206
<id>test-generate</id>

src/main/docker/docker-compose.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ services:
1717
volumes:
1818
- 'redis_data:/bitnami/redis/data'
1919
spring-chat-1:
20-
image: rawsanj/spring-redis-websocket:2.4.6-native
20+
image: rawsanj/spring-redis-websocket:2.5.2-native
2121
environment:
2222
- SPRING_REDIS_HOST=redis
2323
- SPRING_REDIS_PASSWORD=SuperSecretRedisPassword
@@ -26,7 +26,7 @@ services:
2626
depends_on:
2727
- redis
2828
spring-chat-2:
29-
image: rawsanj/spring-redis-websocket:2.4.6-native
29+
image: rawsanj/spring-redis-websocket:2.5.2-native
3030
environment:
3131
- SPRING_REDIS_HOST=redis
3232
- SPRING_REDIS_PASSWORD=SuperSecretRedisPassword
@@ -35,7 +35,7 @@ services:
3535
depends_on:
3636
- redis
3737
spring-chat-3:
38-
image: rawsanj/spring-redis-websocket:2.4.6-native
38+
image: rawsanj/spring-redis-websocket:2.5.2-native
3939
environment:
4040
- SPRING_REDIS_HOST=redis
4141
- SPRING_REDIS_PASSWORD=SuperSecretRedisPassword

src/main/java/com/github/rawsanj/config/HerokuRedisConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ private LettuceConnectionFactory lettuceConnectionFactory(Environment environmen
4848
}
4949

5050
@Bean
51-
ReactiveStringRedisTemplate template(ReactiveRedisConnectionFactory reactiveRedisConnectionFactory) {
51+
ReactiveStringRedisTemplate reactiveStringRedisTemplate(ReactiveRedisConnectionFactory reactiveRedisConnectionFactory) {
5252
return new ReactiveStringRedisTemplate(reactiveRedisConnectionFactory);
5353
}
5454

src/main/java/com/github/rawsanj/config/RedisConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ ReactiveRedisConnectionFactory reactiveRedisConnectionFactory(RedisProperties re
3232
}
3333

3434
@Bean
35-
ReactiveStringRedisTemplate template(ReactiveRedisConnectionFactory reactiveRedisConnectionFactory) {
35+
ReactiveStringRedisTemplate reactiveStringRedisTemplate(ReactiveRedisConnectionFactory reactiveRedisConnectionFactory) {
3636
return new ReactiveStringRedisTemplate(reactiveRedisConnectionFactory);
3737
}
3838

src/main/java/com/github/rawsanj/handler/WebHttpHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.rawsanj.handler;
22

3+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
34
import com.github.rawsanj.messaging.RedisChatMessagePublisher;
45
import lombok.AllArgsConstructor;
56
import lombok.Data;
@@ -31,6 +32,7 @@ public RouterFunction<ServerResponse> htmlRouter(@Value("classpath:/static/index
3132
@Data
3233
@AllArgsConstructor
3334
@NoArgsConstructor
35+
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
3436
public static class Message {
3537
private String message;
3638
}

src/main/java/com/github/rawsanj/model/ChatMessage.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.github.rawsanj.model;
22

3+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
34
import lombok.AllArgsConstructor;
45
import lombok.Data;
56
import lombok.NoArgsConstructor;
67

78
@Data
89
@AllArgsConstructor
910
@NoArgsConstructor
11+
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
1012
public class ChatMessage {
1113

1214
private Integer id;

src/main/k8s/deployment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ spec:
1616
spec:
1717
containers:
1818
- name: spring-redis-websocket
19-
image: rawsanj/spring-redis-websocket:2.4.6-webflux
19+
image: rawsanj/spring-redis-websocket:2.5.2-webflux
2020
resources:
2121
limits:
2222
memory: "512Mi"

src/main/resources/access-filter.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
},
2727
{
2828
"excludeClasses": "org.testcontainers.**"
29+
},
30+
{
31+
"excludeClasses": "reactor.test.**"
2932
}
3033
]
3134
}

src/test/java/com/github/rawsanj/test/SpringRedisWebSocketApplicationIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,13 @@ void testPostMessage() {
6262
log.info("Message Received in Test Connection: {}", webSocketMessage.getPayloadAsText());
6363
ChatMessage chatMessage = objectMapper.readValue(webSocketMessage.getPayloadAsText(), ChatMessage.class);
6464
assertThat(chatMessage.getMessage()).isEqualTo(message);
65-
messageCounter.incrementAndGet();
65+
assertThat(chatMessage.getId()).isEqualTo(messageCounter.incrementAndGet());
6666
} catch (JsonProcessingException e) {
6767
throw new RuntimeException(e);
6868
}
6969
})
7070
.then(session.close())
71-
).timeout(Duration.ofSeconds(2));
71+
).timeout(Duration.ofSeconds(5)); // Assuming it takes 1 seconds to process one message to be on safer side.
7272

7373
StepVerifier.create(executeWebSocketConnectMono)
7474
.then(() -> postMessages(messageCount))

0 commit comments

Comments
 (0)