parent
2bd4eb4e32
commit
51b29485fe
|
@ -66,6 +66,7 @@ include "spring-boot-project:spring-boot-docker-compose"
|
|||
include "spring-boot-project:spring-boot-docs"
|
||||
include "spring-boot-project:spring-boot-jetty"
|
||||
include "spring-boot-project:spring-boot-parent"
|
||||
include "spring-boot-project:spring-boot-reactor-netty"
|
||||
include "spring-boot-project:spring-boot-test"
|
||||
include "spring-boot-project:spring-boot-test-autoconfigure"
|
||||
include "spring-boot-project:spring-boot-test-integration-tests"
|
||||
|
|
|
@ -34,6 +34,7 @@ dependencies {
|
|||
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
|
||||
|
||||
optional(project(":spring-boot-project:spring-boot-jetty"))
|
||||
optional(project(":spring-boot-project:spring-boot-reactor-netty"))
|
||||
optional(project(":spring-boot-project:spring-boot-tomcat"))
|
||||
optional(project(":spring-boot-project:spring-boot-undertow"))
|
||||
optional("ch.qos.logback:logback-classic")
|
||||
|
|
|
@ -26,8 +26,8 @@ import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServe
|
|||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
|
||||
import org.springframework.boot.autoconfigure.web.server.reactive.netty.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.reactor.netty.autoconfigure.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.web.server.reactive.ReactiveWebServerFactory;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ import org.springframework.boot.autoconfigure.AutoConfiguration;
|
|||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
|
||||
import org.springframework.boot.autoconfigure.web.server.reactive.netty.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.reactor.netty.autoconfigure.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.web.server.reactive.ReactiveWebServerFactory;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpointDisco
|
|||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.server.reactive.netty.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.reactor.netty.autoconfigure.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.test.context.assertj.AssertableReactiveWebApplicationContext;
|
||||
import org.springframework.boot.test.context.runner.ContextConsumer;
|
||||
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
|
||||
|
|
|
@ -28,7 +28,7 @@ import org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration
|
|||
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.server.reactive.netty.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.reactor.netty.autoconfigure.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.test.context.assertj.AssertableReactiveWebApplicationContext;
|
||||
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
|
||||
import org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext;
|
||||
|
|
|
@ -28,7 +28,7 @@ import org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration
|
|||
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.server.reactive.netty.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.reactor.netty.autoconfigure.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.test.context.assertj.AssertableReactiveWebApplicationContext;
|
||||
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
|
||||
import org.springframework.boot.web.context.ServerPortInfoApplicationContextInitializer;
|
||||
|
|
|
@ -29,10 +29,10 @@ import org.springframework.boot.actuate.autoconfigure.endpoint.web.documentation
|
|||
import org.springframework.boot.actuate.web.mappings.MappingDescriptionProvider;
|
||||
import org.springframework.boot.actuate.web.mappings.MappingsEndpoint;
|
||||
import org.springframework.boot.actuate.web.mappings.reactive.DispatcherHandlersMappingDescriptionProvider;
|
||||
import org.springframework.boot.reactor.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||
import org.springframework.boot.test.web.server.LocalServerPort;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
|
|
@ -40,6 +40,7 @@ dependencies {
|
|||
dockerTestImplementation("org.testcontainers:testcontainers")
|
||||
|
||||
optional(project(":spring-boot-project:spring-boot-jetty"))
|
||||
optional(project(":spring-boot-project:spring-boot-reactor-netty"))
|
||||
optional(project(":spring-boot-project:spring-boot-tomcat"))
|
||||
optional(project(":spring-boot-project:spring-boot-undertow"))
|
||||
optional("org.apache.cassandra:java-driver-core") {
|
||||
|
@ -107,6 +108,7 @@ dependencies {
|
|||
optional("org.springframework.session:spring-session-core")
|
||||
|
||||
testImplementation(project(":spring-boot-project:spring-boot-autoconfigure-all"))
|
||||
testImplementation(project(":spring-boot-project:spring-boot-reactor-netty"))
|
||||
testImplementation(project(":spring-boot-project:spring-boot-test"))
|
||||
testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support"))
|
||||
testImplementation("io.micrometer:micrometer-observation-test")
|
||||
|
|
|
@ -34,11 +34,11 @@ import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
|||
import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;
|
||||
import org.springframework.boot.reactor.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.test.context.assertj.AssertableReactiveWebApplicationContext;
|
||||
import org.springframework.boot.test.context.runner.ContextConsumer;
|
||||
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
|
||||
import org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
|
|
@ -27,9 +27,9 @@ import org.springframework.boot.actuate.endpoint.web.annotation.AbstractWebEndpo
|
|||
import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpointDiscoverer;
|
||||
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration;
|
||||
import org.springframework.boot.reactor.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext;
|
||||
import org.springframework.boot.web.reactive.context.ReactiveWebServerInitializedEvent;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
|
|
@ -55,10 +55,10 @@ import org.springframework.boot.autoconfigure.jersey.ResourceConfigCustomizer;
|
|||
import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
|
||||
import org.springframework.boot.reactor.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.tomcat.servlet.TomcatServletWebServerFactory;
|
||||
import org.springframework.boot.web.context.WebServerInitializedEvent;
|
||||
import org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
|
|
|
@ -22,18 +22,24 @@ import java.time.Duration;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.netty.handler.ssl.ClientAuth;
|
||||
import io.rsocket.SocketAcceptor;
|
||||
import io.rsocket.transport.ServerTransport;
|
||||
import io.rsocket.transport.netty.server.CloseableChannel;
|
||||
import io.rsocket.transport.netty.server.TcpServerTransport;
|
||||
import io.rsocket.transport.netty.server.WebsocketServerTransport;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.netty.http.Http11SslContextSpec;
|
||||
import reactor.netty.http.server.HttpServer;
|
||||
import reactor.netty.tcp.AbstractProtocolSslContextSpec;
|
||||
import reactor.netty.tcp.SslProvider;
|
||||
import reactor.netty.tcp.SslProvider.GenericSslContextSpec;
|
||||
import reactor.netty.tcp.SslProvider.SslContextSpec;
|
||||
import reactor.netty.tcp.TcpServer;
|
||||
|
||||
import org.springframework.boot.context.properties.PropertyMapper;
|
||||
|
@ -43,11 +49,10 @@ import org.springframework.boot.rsocket.server.RSocketServerCustomizer;
|
|||
import org.springframework.boot.rsocket.server.RSocketServerFactory;
|
||||
import org.springframework.boot.ssl.SslBundle;
|
||||
import org.springframework.boot.ssl.SslBundles;
|
||||
import org.springframework.boot.ssl.SslOptions;
|
||||
import org.springframework.boot.web.server.Ssl;
|
||||
import org.springframework.boot.web.server.Ssl.ClientAuth;
|
||||
import org.springframework.boot.web.server.Ssl.ServerNameSslBundle;
|
||||
import org.springframework.boot.web.server.WebServerSslBundle;
|
||||
import org.springframework.boot.web.server.reactive.netty.SslServerCustomizer;
|
||||
import org.springframework.http.client.ReactorResourceFactory;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.unit.DataSize;
|
||||
|
@ -185,7 +190,7 @@ public class NettyRSocketServerFactory implements RSocketServerFactory, Configur
|
|||
}
|
||||
|
||||
private HttpServer customizeSslConfiguration(HttpServer httpServer) {
|
||||
return new SslServerCustomizer(null, this.ssl.getClientAuth(), getSslBundle(), getServerNameSslBundles())
|
||||
return new HttpServerSslCustomizer(this.ssl.getClientAuth(), getSslBundle(), getServerNameSslBundles())
|
||||
.apply(httpServer);
|
||||
}
|
||||
|
||||
|
@ -195,7 +200,7 @@ public class NettyRSocketServerFactory implements RSocketServerFactory, Configur
|
|||
tcpServer = tcpServer.runOn(this.resourceFactory.getLoopResources());
|
||||
}
|
||||
if (Ssl.isEnabled(this.ssl)) {
|
||||
tcpServer = new TcpSslServerCustomizer(this.ssl.getClientAuth(), getSslBundle(), getServerNameSslBundles())
|
||||
tcpServer = new TcpServerSslCustomizer(this.ssl.getClientAuth(), getSslBundle(), getServerNameSslBundles())
|
||||
.apply(tcpServer);
|
||||
}
|
||||
return TcpServerTransport.create(tcpServer.bindAddress(this::getListenAddress));
|
||||
|
@ -222,14 +227,35 @@ public class NettyRSocketServerFactory implements RSocketServerFactory, Configur
|
|||
return new InetSocketAddress(this.port);
|
||||
}
|
||||
|
||||
private static final class TcpSslServerCustomizer
|
||||
extends org.springframework.boot.web.server.reactive.netty.SslServerCustomizer {
|
||||
private abstract static class SslCustomizer {
|
||||
|
||||
private final ClientAuth clientAuth;
|
||||
|
||||
protected SslCustomizer(ClientAuth clientAuth) {
|
||||
this.clientAuth = clientAuth;
|
||||
}
|
||||
|
||||
protected final AbstractProtocolSslContextSpec<?> createSslContextSpec(SslBundle sslBundle) {
|
||||
AbstractProtocolSslContextSpec<?> sslContextSpec = Http11SslContextSpec
|
||||
.forServer(sslBundle.getManagers().getKeyManagerFactory());
|
||||
return sslContextSpec.configure((builder) -> {
|
||||
builder.trustManager(sslBundle.getManagers().getTrustManagerFactory());
|
||||
SslOptions options = sslBundle.getOptions();
|
||||
builder.protocols(options.getEnabledProtocols());
|
||||
builder.ciphers(SslOptions.asSet(options.getCiphers()));
|
||||
builder.clientAuth(this.clientAuth);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static final class TcpServerSslCustomizer extends SslCustomizer {
|
||||
|
||||
private final SslBundle sslBundle;
|
||||
|
||||
private TcpSslServerCustomizer(ClientAuth clientAuth, SslBundle sslBundle,
|
||||
private TcpServerSslCustomizer(Ssl.ClientAuth clientAuth, SslBundle sslBundle,
|
||||
Map<String, SslBundle> serverNameSslBundles) {
|
||||
super(null, clientAuth, sslBundle, serverNameSslBundles);
|
||||
super(Ssl.ClientAuth.map(clientAuth, ClientAuth.NONE, ClientAuth.OPTIONAL, ClientAuth.REQUIRE));
|
||||
this.sslBundle = sslBundle;
|
||||
}
|
||||
|
||||
|
@ -240,4 +266,42 @@ public class NettyRSocketServerFactory implements RSocketServerFactory, Configur
|
|||
|
||||
}
|
||||
|
||||
private static final class HttpServerSslCustomizer extends SslCustomizer {
|
||||
|
||||
private final SslProvider sslProvider;
|
||||
|
||||
private final Map<String, SslProvider> serverNameSslProviders;
|
||||
|
||||
private HttpServerSslCustomizer(Ssl.ClientAuth clientAuth, SslBundle sslBundle,
|
||||
Map<String, SslBundle> serverNameSslBundles) {
|
||||
super(Ssl.ClientAuth.map(clientAuth, ClientAuth.NONE, ClientAuth.OPTIONAL, ClientAuth.REQUIRE));
|
||||
this.sslProvider = createSslProvider(sslBundle);
|
||||
this.serverNameSslProviders = createServerNameSslProviders(serverNameSslBundles);
|
||||
}
|
||||
|
||||
private HttpServer apply(HttpServer server) {
|
||||
return server.secure(this::applySecurity);
|
||||
}
|
||||
|
||||
private void applySecurity(SslContextSpec spec) {
|
||||
spec.sslContext(this.sslProvider.getSslContext()).setSniAsyncMappings((serverName, promise) -> {
|
||||
SslProvider provider = (serverName != null) ? this.serverNameSslProviders.get(serverName)
|
||||
: this.sslProvider;
|
||||
return promise.setSuccess(provider);
|
||||
});
|
||||
}
|
||||
|
||||
private Map<String, SslProvider> createServerNameSslProviders(Map<String, SslBundle> serverNameSslBundles) {
|
||||
Map<String, SslProvider> serverNameSslProviders = new HashMap<>();
|
||||
serverNameSslBundles.forEach(
|
||||
(serverName, sslBundle) -> serverNameSslProviders.put(serverName, createSslProvider(sslBundle)));
|
||||
return serverNameSslProviders;
|
||||
}
|
||||
|
||||
private SslProvider createSslProvider(SslBundle sslBundle) {
|
||||
return SslProvider.builder().sslContext((GenericSslContextSpec<?>) createSslContextSpec(sslBundle)).build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -59,6 +59,7 @@ dependencies {
|
|||
dockerTestImplementation("org.testcontainers:pulsar")
|
||||
dockerTestImplementation("org.testcontainers:testcontainers")
|
||||
|
||||
optional(project(":spring-boot-project:spring-boot-reactor-netty"))
|
||||
optional(project(":spring-boot-project:spring-boot-tomcat"))
|
||||
optional("co.elastic.clients:elasticsearch-java")
|
||||
optional("com.fasterxml.jackson.core:jackson-databind")
|
||||
|
|
|
@ -26,11 +26,11 @@ import org.springframework.boot.autoconfigure.AutoConfiguration;
|
|||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.reactor.netty.ReactorNettyConfigurations;
|
||||
import org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.http.client.reactive.ClientHttpConnectorBuilder;
|
||||
import org.springframework.boot.http.client.reactive.ClientHttpConnectorSettings;
|
||||
import org.springframework.boot.reactor.netty.autoconfigure.ReactorNettyConfigurations;
|
||||
import org.springframework.boot.ssl.SslBundles;
|
||||
import org.springframework.boot.util.LambdaSafe;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
|
|
@ -33,10 +33,10 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
|||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||
import org.springframework.boot.autoconfigure.reactor.netty.ReactorNettyConfigurations;
|
||||
import org.springframework.boot.autoconfigure.rsocket.RSocketProperties.Server.Spec;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.context.properties.PropertyMapper;
|
||||
import org.springframework.boot.reactor.netty.autoconfigure.ReactorNettyConfigurations;
|
||||
import org.springframework.boot.rsocket.context.RSocketServerBootstrap;
|
||||
import org.springframework.boot.rsocket.netty.NettyRSocketServerFactory;
|
||||
import org.springframework.boot.rsocket.server.RSocketServerCustomizer;
|
||||
|
@ -56,8 +56,8 @@ import org.springframework.util.unit.DataSize;
|
|||
* {@link EnableAutoConfiguration Auto-configuration} for RSocket servers. In the case of
|
||||
* {@link org.springframework.boot.WebApplicationType#REACTIVE}, the RSocket server is
|
||||
* added as a WebSocket endpoint on the existing
|
||||
* {@link org.springframework.boot.web.server.reactive.netty.NettyWebServer}. If a
|
||||
* specific server port is configured, a new standalone RSocket server is created.
|
||||
* {@link org.springframework.boot.reactor.netty.NettyWebServer}. If a specific server
|
||||
* port is configured, a new standalone RSocket server is created.
|
||||
*
|
||||
* @author Brian Clozel
|
||||
* @author Scott Frederick
|
||||
|
|
|
@ -28,8 +28,8 @@ import reactor.netty.http.server.HttpServerRoutes;
|
|||
import reactor.netty.http.server.WebsocketServerSpec;
|
||||
import reactor.netty.http.server.WebsocketServerSpec.Builder;
|
||||
|
||||
import org.springframework.boot.reactor.netty.NettyRouteProvider;
|
||||
import org.springframework.boot.rsocket.server.RSocketServerCustomizer;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyRouteProvider;
|
||||
|
||||
/**
|
||||
* {@link NettyRouteProvider} that configures an RSocket Websocket endpoint.
|
||||
|
|
|
@ -25,8 +25,8 @@ import org.springframework.boot.autoconfigure.AutoConfiguration;
|
|||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.http.client.reactive.ClientHttpConnectorBuilderCustomizer;
|
||||
import org.springframework.boot.autoconfigure.reactor.netty.ReactorNettyConfigurations.ReactorResourceFactoryConfiguration;
|
||||
import org.springframework.boot.http.client.reactive.ReactorClientHttpConnectorBuilder;
|
||||
import org.springframework.boot.reactor.netty.autoconfigure.ReactorNettyConfigurations.ReactorResourceFactoryConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
|
|
@ -1,13 +1,6 @@
|
|||
{
|
||||
"groups": [],
|
||||
"properties": [
|
||||
{
|
||||
"name": "server.netty.max-chunk-size",
|
||||
"deprecation": {
|
||||
"reason": "Deprecated for removal in Reactor Netty.",
|
||||
"level": "error"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "spring.activemq.pool.create-connection-on-startup",
|
||||
"type": "java.lang.Boolean",
|
||||
|
|
|
@ -132,7 +132,6 @@ org.springframework.boot.autoconfigure.web.reactive.WebSessionIdResolverAutoConf
|
|||
org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration
|
||||
org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration
|
||||
org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration
|
||||
org.springframework.boot.autoconfigure.web.server.reactive.netty.NettyReactiveWebServerAutoConfiguration
|
||||
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration
|
||||
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
|
||||
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration
|
||||
|
|
|
@ -34,13 +34,13 @@ import org.springframework.boot.autoconfigure.rsocket.RSocketStrategiesAutoConfi
|
|||
import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration;
|
||||
import org.springframework.boot.reactor.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.reactor.netty.NettyRouteProvider;
|
||||
import org.springframework.boot.rsocket.context.RSocketPortInfoApplicationContextInitializer;
|
||||
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
|
||||
import org.springframework.boot.testsupport.classpath.resources.WithResource;
|
||||
import org.springframework.boot.web.context.ServerPortInfoApplicationContextInitializer;
|
||||
import org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyRouteProvider;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.graphql.client.RSocketGraphQlClient;
|
||||
|
|
|
@ -27,7 +27,7 @@ import org.springframework.boot.WebApplicationType;
|
|||
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.server.reactive.netty.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.reactor.netty.autoconfigure.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||
import org.springframework.boot.web.reactive.result.view.MustacheView;
|
||||
|
|
|
@ -28,11 +28,11 @@ import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
|
|||
import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration;
|
||||
import org.springframework.boot.reactor.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
|
||||
import org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext;
|
||||
import org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext;
|
||||
import org.springframework.boot.web.server.WebServer;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
|
|
@ -37,7 +37,7 @@ import org.springframework.boot.autoconfigure.web.ServerProperties;
|
|||
import org.springframework.boot.autoconfigure.web.WebProperties;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.server.reactive.netty.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.reactor.netty.autoconfigure.NettyReactiveWebServerAutoConfiguration;
|
||||
import org.springframework.boot.test.context.assertj.AssertableReactiveWebApplicationContext;
|
||||
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
|
||||
import org.springframework.boot.test.system.CapturedOutput;
|
||||
|
|
|
@ -1998,6 +1998,7 @@ bom {
|
|||
"spring-boot-loader-classic",
|
||||
"spring-boot-loader-tools",
|
||||
"spring-boot-properties-migrator",
|
||||
"spring-boot-reactor-netty",
|
||||
"spring-boot-starter",
|
||||
"spring-boot-starter-activemq",
|
||||
"spring-boot-starter-actuator",
|
||||
|
|
|
@ -80,6 +80,7 @@ dependencies {
|
|||
autoConfiguration(project(path: ":spring-boot-project:spring-boot-autoconfigure-all", configuration: "autoConfigurationMetadata"))
|
||||
autoConfiguration(project(path: ":spring-boot-project:spring-boot-devtools", configuration: "autoConfigurationMetadata"))
|
||||
autoConfiguration(project(path: ":spring-boot-project:spring-boot-jetty", configuration: "autoConfigurationMetadata"))
|
||||
autoConfiguration(project(path: ":spring-boot-project:spring-boot-reactor-netty", configuration: "autoConfigurationMetadata"))
|
||||
autoConfiguration(project(path: ":spring-boot-project:spring-boot-testcontainers", configuration: "autoConfigurationMetadata"))
|
||||
autoConfiguration(project(path: ":spring-boot-project:spring-boot-tomcat", configuration: "autoConfigurationMetadata"))
|
||||
autoConfiguration(project(path: ":spring-boot-project:spring-boot-undertow", configuration: "autoConfigurationMetadata"))
|
||||
|
@ -92,6 +93,7 @@ dependencies {
|
|||
configurationProperties(project(path: ":spring-boot-project:spring-boot-devtools", configuration: "configurationPropertiesMetadata"))
|
||||
configurationProperties(project(path: ":spring-boot-project:spring-boot-docker-compose", configuration: "configurationPropertiesMetadata"))
|
||||
configurationProperties(project(path: ":spring-boot-project:spring-boot-jetty", configuration: "configurationPropertiesMetadata"))
|
||||
configurationProperties(project(path: ":spring-boot-project:spring-boot-reactor-netty", configuration: "configurationPropertiesMetadata"))
|
||||
configurationProperties(project(path: ":spring-boot-project:spring-boot-test-autoconfigure", configuration: "configurationPropertiesMetadata"))
|
||||
configurationProperties(project(path: ":spring-boot-project:spring-boot-testcontainers", configuration: "configurationPropertiesMetadata"))
|
||||
configurationProperties(project(path: ":spring-boot-project:spring-boot-tomcat", configuration: "configurationPropertiesMetadata"))
|
||||
|
@ -105,6 +107,7 @@ dependencies {
|
|||
implementation(project(path: ":spring-boot-project:spring-boot-autoconfigure-all"))
|
||||
implementation(project(path: ":spring-boot-project:spring-boot-devtools"))
|
||||
implementation(project(path: ":spring-boot-project:spring-boot-docker-compose"))
|
||||
implementation(project(path: ":spring-boot-project:spring-boot-reactor-netty"))
|
||||
implementation(project(path: ":spring-boot-project:spring-boot-test"))
|
||||
implementation(project(path: ":spring-boot-project:spring-boot-test-autoconfigure"))
|
||||
implementation(project(path: ":spring-boot-project:spring-boot-testcontainers"))
|
||||
|
|
|
@ -18,8 +18,8 @@ package org.springframework.boot.docs.web.reactive.reactiveserver.customizing.pr
|
|||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.springframework.boot.reactor.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
package org.springframework.boot.docs.web.reactive.reactiveserver.customizing.programmatic
|
||||
|
||||
import org.springframework.boot.web.server.WebServerFactoryCustomizer
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyReactiveWebServerFactory
|
||||
import org.springframework.boot.reactor.netty.NettyReactiveWebServerFactory
|
||||
import org.springframework.stereotype.Component
|
||||
import java.time.Duration
|
||||
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright 2012-present the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the License);
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
plugins {
|
||||
id "java-library"
|
||||
id "org.springframework.boot.auto-configuration"
|
||||
id "org.springframework.boot.configuration-properties"
|
||||
id "org.springframework.boot.deployed"
|
||||
id "org.springframework.boot.optional-dependencies"
|
||||
}
|
||||
|
||||
description = "Spring Boot Reactor Netty"
|
||||
|
||||
dependencies {
|
||||
api(project(":spring-boot-project:spring-boot"))
|
||||
api("io.projectreactor.netty:reactor-netty-http")
|
||||
api("org.springframework:spring-web")
|
||||
|
||||
optional(project(":spring-boot-project:spring-boot-autoconfigure"))
|
||||
|
||||
testImplementation(project(":spring-boot-project:spring-boot-test"))
|
||||
testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support"))
|
||||
testImplementation(testFixtures(project(":spring-boot-project:spring-boot")))
|
||||
testImplementation(testFixtures(project(":spring-boot-project:spring-boot-autoconfigure")))
|
||||
testImplementation("io.projectreactor:reactor-test")
|
||||
testImplementation("org.springframework:spring-webflux")
|
||||
|
||||
testRuntimeOnly("ch.qos.logback:logback-classic")
|
||||
testRuntimeOnly("org.eclipse.jetty:jetty-client")
|
||||
testRuntimeOnly("org.eclipse.jetty.http2:jetty-http2-client")
|
||||
testRuntimeOnly("org.eclipse.jetty.http2:jetty-http2-client-transport")
|
||||
}
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.function.Supplier;
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.time.Duration;
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Collections;
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.autoconfigure.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty.autoconfigure;
|
||||
|
||||
import reactor.netty.http.server.HttpServer;
|
||||
|
||||
|
@ -23,14 +23,14 @@ import org.springframework.boot.autoconfigure.AutoConfiguration;
|
|||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.reactor.netty.ReactorNettyConfigurations.ReactorResourceFactoryConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.ServerProperties;
|
||||
import org.springframework.boot.autoconfigure.web.server.reactive.ReactiveWebServerConfiguration;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.reactor.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.reactor.netty.NettyRouteProvider;
|
||||
import org.springframework.boot.reactor.netty.NettyServerCustomizer;
|
||||
import org.springframework.boot.reactor.netty.autoconfigure.ReactorNettyConfigurations.ReactorResourceFactoryConfiguration;
|
||||
import org.springframework.boot.web.server.reactive.ReactiveWebServerFactory;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyRouteProvider;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyServerCustomizer;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.core.env.Environment;
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.autoconfigure.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty.autoconfigure;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
|
@ -23,8 +23,8 @@ import io.netty.channel.ChannelOption;
|
|||
import org.springframework.boot.autoconfigure.web.ServerProperties;
|
||||
import org.springframework.boot.cloud.CloudPlatform;
|
||||
import org.springframework.boot.context.properties.PropertyMapper;
|
||||
import org.springframework.boot.reactor.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.env.Environment;
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.autoconfigure.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty.autoconfigure;
|
||||
|
||||
import java.time.Duration;
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.autoconfigure.reactor.netty;
|
||||
package org.springframework.boot.reactor.netty.autoconfigure;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.autoconfigure.reactor.netty;
|
||||
package org.springframework.boot.reactor.netty.autoconfigure;
|
||||
|
||||
import java.time.Duration;
|
||||
|
|
@ -17,4 +17,4 @@
|
|||
/**
|
||||
* Auto-configuration for Reactor Netty.
|
||||
*/
|
||||
package org.springframework.boot.autoconfigure.reactor.netty;
|
||||
package org.springframework.boot.reactor.netty.autoconfigure;
|
|
@ -18,4 +18,4 @@
|
|||
* Reactive web server implementation backed by Netty.
|
||||
*
|
||||
*/
|
||||
package org.springframework.boot.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty;
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"groups": [],
|
||||
"properties": [
|
||||
{
|
||||
"name": "server.netty.max-chunk-size",
|
||||
"deprecation": {
|
||||
"reason": "Deprecated for removal in Reactor Netty.",
|
||||
"level": "error"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
org.springframework.boot.reactor.netty.autoconfigure.NettyReactiveWebServerAutoConfiguration
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty;
|
||||
|
||||
import java.net.ConnectException;
|
||||
import java.net.SocketAddress;
|
|
@ -14,15 +14,15 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.autoconfigure.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty.autoconfigure;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import reactor.netty.http.server.HttpServer;
|
||||
|
||||
import org.springframework.boot.autoconfigure.web.server.reactive.AbstractReactiveWebServerAutoConfigurationTests;
|
||||
import org.springframework.boot.reactor.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.reactor.netty.NettyServerCustomizer;
|
||||
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyServerCustomizer;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.autoconfigure.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty.autoconfigure;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Map;
|
||||
|
@ -32,8 +32,8 @@ import reactor.netty.http.server.HttpServer;
|
|||
|
||||
import org.springframework.boot.autoconfigure.web.ServerProperties;
|
||||
import org.springframework.boot.context.properties.source.ConfigurationPropertySources;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.web.server.reactive.netty.NettyServerCustomizer;
|
||||
import org.springframework.boot.reactor.netty.NettyReactiveWebServerFactory;
|
||||
import org.springframework.boot.reactor.netty.NettyServerCustomizer;
|
||||
import org.springframework.mock.env.MockEnvironment;
|
||||
import org.springframework.util.unit.DataSize;
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.autoconfigure.web.server.reactive.netty;
|
||||
package org.springframework.boot.reactor.netty.autoconfigure;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Collections;
|
|
@ -21,5 +21,5 @@ plugins {
|
|||
description = "Starter for using Reactor Netty as the embedded reactive HTTP server."
|
||||
|
||||
dependencies {
|
||||
api("io.projectreactor.netty:reactor-netty-http")
|
||||
api(project(":spring-boot-project:spring-boot-reactor-netty"))
|
||||
}
|
||||
|
|
|
@ -51,6 +51,7 @@ dependencies {
|
|||
dockerTestRuntimeOnly("io.lettuce:lettuce-core")
|
||||
dockerTestRuntimeOnly("org.springframework.data:spring-data-redis")
|
||||
|
||||
optional(project(":spring-boot-project:spring-boot-reactor-netty"))
|
||||
optional("jakarta.json.bind:jakarta.json.bind-api")
|
||||
optional("jakarta.persistence:jakarta.persistence-api")
|
||||
optional("jakarta.servlet:jakarta.servlet-api")
|
||||
|
|
Loading…
Reference in New Issue