|
24 | 24 | import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
25 | 25 | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
26 | 26 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
| 27 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnThreading; |
27 | 28 | import org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration;
|
| 29 | +import org.springframework.boot.autoconfigure.thread.Threading; |
28 | 30 | import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
29 | 31 | import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder;
|
30 | 32 | import org.springframework.boot.http.client.ClientHttpRequestFactorySettings;
|
| 33 | +import org.springframework.boot.http.client.JdkClientHttpRequestFactoryBuilder; |
31 | 34 | import org.springframework.boot.ssl.SslBundles;
|
32 | 35 | import org.springframework.boot.util.LambdaSafe;
|
33 | 36 | import org.springframework.context.annotation.Bean;
|
@@ -63,18 +66,31 @@ public void setBeanClassLoader(ClassLoader classLoader) {
|
63 | 66 |
|
64 | 67 | @Bean
|
65 | 68 | @ConditionalOnMissingBean
|
66 |
| - ClientHttpRequestFactoryBuilder<?> clientHttpRequestFactoryBuilder( |
| 69 | + @ConditionalOnThreading(Threading.PLATFORM) |
| 70 | + ClientHttpRequestFactoryBuilder<?> clientHttpRequestFactoryBuilderOnPlatform( |
67 | 71 | ObjectProvider<ClientHttpRequestFactoryBuilderCustomizer<?>> clientHttpRequestFactoryBuilderCustomizers) {
|
68 | 72 | ClientHttpRequestFactoryBuilder<?> builder = this.factories.builder(this.beanClassLoader);
|
69 | 73 | return customize(builder, clientHttpRequestFactoryBuilderCustomizers.orderedStream().toList());
|
70 | 74 | }
|
71 | 75 |
|
| 76 | + @Bean |
| 77 | + @ConditionalOnMissingBean |
| 78 | + @ConditionalOnThreading(Threading.VIRTUAL) |
| 79 | + ClientHttpRequestFactoryBuilder<?> clientHttpRequestFactoryBuilderOnVirtual( |
| 80 | + ObjectProvider<ClientHttpRequestFactoryBuilderCustomizer<?>> clientHttpRequestFactoryBuilderCustomizers) { |
| 81 | + ClientHttpRequestFactoryBuilder<?> builder = this.factories.builder(this.beanClassLoader); |
| 82 | + if (builder instanceof JdkClientHttpRequestFactoryBuilder jdk) { |
| 83 | + return customize(jdk.enableVirtualThreadExecutor(), clientHttpRequestFactoryBuilderCustomizers.orderedStream().toList()); |
| 84 | + } |
| 85 | + return customize(builder, clientHttpRequestFactoryBuilderCustomizers.orderedStream().toList()); |
| 86 | + } |
| 87 | + |
72 | 88 | @SuppressWarnings("unchecked")
|
73 | 89 | private ClientHttpRequestFactoryBuilder<?> customize(ClientHttpRequestFactoryBuilder<?> builder,
|
74 | 90 | List<ClientHttpRequestFactoryBuilderCustomizer<?>> customizers) {
|
75 | 91 | ClientHttpRequestFactoryBuilder<?>[] builderReference = { builder };
|
76 | 92 | LambdaSafe.callbacks(ClientHttpRequestFactoryBuilderCustomizer.class, customizers, builderReference[0])
|
77 |
| - .invoke((customizer) -> builderReference[0] = customizer.customize(builderReference[0])); |
| 93 | + .invoke((customizer) -> builderReference[0] = customizer.customize(builderReference[0])); |
78 | 94 | return builderReference[0];
|
79 | 95 | }
|
80 | 96 |
|
|
0 commit comments