Skip to content

Commit ac3ecb5

Browse files
committed
Add GrpcServerFactoryCustomizer escape hatch
1 parent 766525c commit ac3ecb5

File tree

2 files changed

+42
-3
lines changed

2 files changed

+42
-3
lines changed

spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/server/GrpcServerFactoryConfigurations.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ static class ShadedNettyServerFactoryConfiguration {
6666
@Bean
6767
ShadedNettyGrpcServerFactory shadedNettyGrpcServerFactory(GrpcServerProperties properties,
6868
GrpcServiceDiscoverer serviceDiscoverer, GrpcServiceConfigurer serviceConfigurer,
69-
ServerBuilderCustomizers serverBuilderCustomizers, SslBundles bundles) {
69+
ServerBuilderCustomizers serverBuilderCustomizers, SslBundles bundles,
70+
ObjectProvider<GrpcServerFactoryCustomizer> customizers) {
7071
ShadedNettyServerFactoryPropertyMapper mapper = new ShadedNettyServerFactoryPropertyMapper(properties);
7172
List<ServerBuilderCustomizer<io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder>> builderCustomizers = List
7273
.of(mapper::customizeServerBuilder, serverBuilderCustomizers::customize);
@@ -80,6 +81,7 @@ ShadedNettyGrpcServerFactory shadedNettyGrpcServerFactory(GrpcServerProperties p
8081
}
8182
ShadedNettyGrpcServerFactory factory = new ShadedNettyGrpcServerFactory(properties.getAddress(),
8283
builderCustomizers, keyManager, trustManager, properties.getSsl().getClientAuth());
84+
applyServerFactoryCustomizers(customizers, factory);
8385
serviceDiscoverer.findServices()
8486
.stream()
8587
.map((serviceSpec) -> serviceConfigurer.configure(serviceSpec, factory))
@@ -108,7 +110,8 @@ static class NettyServerFactoryConfiguration {
108110
@Bean
109111
NettyGrpcServerFactory nettyGrpcServerFactory(GrpcServerProperties properties,
110112
GrpcServiceDiscoverer serviceDiscoverer, GrpcServiceConfigurer serviceConfigurer,
111-
ServerBuilderCustomizers serverBuilderCustomizers, SslBundles bundles) {
113+
ServerBuilderCustomizers serverBuilderCustomizers, SslBundles bundles,
114+
ObjectProvider<GrpcServerFactoryCustomizer> customizers) {
112115
NettyServerFactoryPropertyMapper mapper = new NettyServerFactoryPropertyMapper(properties);
113116
List<ServerBuilderCustomizer<NettyServerBuilder>> builderCustomizers = List
114117
.of(mapper::customizeServerBuilder, serverBuilderCustomizers::customize);
@@ -122,6 +125,7 @@ NettyGrpcServerFactory nettyGrpcServerFactory(GrpcServerProperties properties,
122125
}
123126
NettyGrpcServerFactory factory = new NettyGrpcServerFactory(properties.getAddress(), builderCustomizers,
124127
keyManager, trustManager, properties.getSsl().getClientAuth());
128+
applyServerFactoryCustomizers(customizers, factory);
125129
serviceDiscoverer.findServices()
126130
.stream()
127131
.map((serviceSpec) -> serviceConfigurer.configure(serviceSpec, factory))
@@ -151,14 +155,16 @@ InProcessGrpcServerFactory inProcessGrpcServerFactory(GrpcServerProperties prope
151155
GrpcServiceDiscoverer serviceDiscoverer, GrpcServiceConfigurer serviceConfigurer,
152156
ServerBuilderCustomizers serverBuilderCustomizers,
153157
ObjectProvider<ServerInterceptorFilter> interceptorFilter,
154-
ObjectProvider<ServerServiceDefinitionFilter> serviceFilter) {
158+
ObjectProvider<ServerServiceDefinitionFilter> serviceFilter,
159+
ObjectProvider<GrpcServerFactoryCustomizer> customizers) {
155160
var mapper = new InProcessServerFactoryPropertyMapper(properties);
156161
List<ServerBuilderCustomizer<InProcessServerBuilder>> builderCustomizers = List
157162
.of(mapper::customizeServerBuilder, serverBuilderCustomizers::customize);
158163
InProcessGrpcServerFactory factory = new InProcessGrpcServerFactory(properties.getInprocess().getName(),
159164
builderCustomizers);
160165
factory.setInterceptorFilter(interceptorFilter.getIfAvailable());
161166
factory.setServiceFilter(serviceFilter.getIfAvailable());
167+
applyServerFactoryCustomizers(customizers, factory);
162168
serviceDiscoverer.findServices()
163169
.stream()
164170
.map((serviceSpec) -> serviceConfigurer.configure(serviceSpec, factory))
@@ -176,4 +182,9 @@ GrpcServerLifecycle inProcessGrpcServerLifecycle(InProcessGrpcServerFactory fact
176182

177183
}
178184

185+
private static void applyServerFactoryCustomizers(ObjectProvider<GrpcServerFactoryCustomizer> customizers,
186+
GrpcServerFactory factory) {
187+
customizers.orderedStream().forEach(customizer -> customizer.customize(factory));
188+
}
189+
179190
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright 2024-2024 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.springframework.grpc.autoconfigure.server;
17+
18+
import org.springframework.grpc.server.GrpcServerFactory;
19+
20+
public interface GrpcServerFactoryCustomizer {
21+
22+
/**
23+
* Customize the given {@link GrpcServerFactory}.
24+
* @param serverFactory the server factory to customize
25+
*/
26+
void customize(GrpcServerFactory serverFactory);
27+
28+
}

0 commit comments

Comments
 (0)