Skip to content

Commit 5b2de5c

Browse files
committed
Configure PathPattern for RSocket routing
This commit configures a `PathPatternRouteMatcher` in the RSocket support if spring-web is on the classpath. This `RouteMatcher` implementation is more efficient than the `SimpleRouteMatcher`, which is based on the `AntPathMatcher`. Closes gh-16865
1 parent a6fdfac commit 5b2de5c

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfiguration.java

+10
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
import org.springframework.messaging.rsocket.MessageHandlerAcceptor;
2929
import org.springframework.messaging.rsocket.RSocketRequester;
3030
import org.springframework.messaging.rsocket.RSocketStrategies;
31+
import org.springframework.util.ClassUtils;
32+
import org.springframework.web.util.pattern.PathPatternParser;
33+
import org.springframework.web.util.pattern.PathPatternRouteMatcher;
3134

3235
/**
3336
* {@link EnableAutoConfiguration Auto-configuration} for Spring RSocket support in Spring
@@ -42,12 +45,19 @@
4245
@AutoConfigureAfter(RSocketStrategiesAutoConfiguration.class)
4346
public class RSocketMessagingAutoConfiguration {
4447

48+
private static String PATHPATTERN_ROUTEMATCHER_CLASS = "org.springframework.web.util.pattern.PathPatternRouteMatcher";
49+
4550
@Bean
4651
@ConditionalOnMissingBean
4752
public MessageHandlerAcceptor messageHandlerAcceptor(
4853
RSocketStrategies rSocketStrategies) {
4954
MessageHandlerAcceptor acceptor = new MessageHandlerAcceptor();
5055
acceptor.setRSocketStrategies(rSocketStrategies);
56+
if (ClassUtils.isPresent(PATHPATTERN_ROUTEMATCHER_CLASS, null)) {
57+
PathPatternParser parser = new PathPatternParser();
58+
parser.setSeparator('.');
59+
acceptor.setRouteMatcher(new PathPatternRouteMatcher(parser));
60+
}
5161
return acceptor;
5262
}
5363

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketMessagingAutoConfigurationTests.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.core.codec.StringDecoder;
2727
import org.springframework.messaging.rsocket.MessageHandlerAcceptor;
2828
import org.springframework.messaging.rsocket.RSocketStrategies;
29+
import org.springframework.web.util.pattern.PathPatternRouteMatcher;
2930

3031
import static org.assertj.core.api.Assertions.assertThat;
3132

@@ -43,8 +44,11 @@ public class RSocketMessagingAutoConfigurationTests {
4344

4445
@Test
4546
public void shouldCreateDefaultBeans() {
46-
this.contextRunner.run((context) -> assertThat(context)
47-
.getBeans(MessageHandlerAcceptor.class).hasSize(1));
47+
this.contextRunner.run((context) -> {
48+
assertThat(context).getBeans(MessageHandlerAcceptor.class).hasSize(1);
49+
assertThat(context.getBean(MessageHandlerAcceptor.class).getRouteMatcher())
50+
.isInstanceOf(PathPatternRouteMatcher.class);
51+
});
4852
}
4953

5054
@Test

0 commit comments

Comments
 (0)