|
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; |
@@ -64,18 +67,31 @@ public void setBeanClassLoader(ClassLoader classLoader) { |
64 | 67 |
|
65 | 68 | @Bean |
66 | 69 | @ConditionalOnMissingBean |
67 | | - ClientHttpRequestFactoryBuilder<?> clientHttpRequestFactoryBuilder( |
| 70 | + @ConditionalOnThreading(Threading.PLATFORM) |
| 71 | + ClientHttpRequestFactoryBuilder<?> clientHttpRequestFactoryBuilderOnPlatform( |
68 | 72 | ObjectProvider<ClientHttpRequestFactoryBuilderCustomizer<?>> clientHttpRequestFactoryBuilderCustomizers) { |
69 | 73 | ClientHttpRequestFactoryBuilder<?> builder = this.factories.builder(this.beanClassLoader); |
70 | 74 | return customize(builder, clientHttpRequestFactoryBuilderCustomizers.orderedStream().toList()); |
71 | 75 | } |
72 | 76 |
|
| 77 | + @Bean |
| 78 | + @ConditionalOnMissingBean |
| 79 | + @ConditionalOnThreading(Threading.VIRTUAL) |
| 80 | + ClientHttpRequestFactoryBuilder<?> clientHttpRequestFactoryBuilderOnVirtual( |
| 81 | + ObjectProvider<ClientHttpRequestFactoryBuilderCustomizer<?>> clientHttpRequestFactoryBuilderCustomizers) { |
| 82 | + ClientHttpRequestFactoryBuilder<?> builder = this.factories.builder(this.beanClassLoader); |
| 83 | + if (builder instanceof JdkClientHttpRequestFactoryBuilder jdk) { |
| 84 | + return customize(jdk.enableVirtualThreadExecutor(), clientHttpRequestFactoryBuilderCustomizers.orderedStream().toList()); |
| 85 | + } |
| 86 | + return customize(builder, clientHttpRequestFactoryBuilderCustomizers.orderedStream().toList()); |
| 87 | + } |
| 88 | + |
73 | 89 | @SuppressWarnings("unchecked") |
74 | 90 | private ClientHttpRequestFactoryBuilder<?> customize(ClientHttpRequestFactoryBuilder<?> builder, |
75 | 91 | List<ClientHttpRequestFactoryBuilderCustomizer<?>> customizers) { |
76 | 92 | ClientHttpRequestFactoryBuilder<?>[] builderReference = { builder }; |
77 | 93 | LambdaSafe.callbacks(ClientHttpRequestFactoryBuilderCustomizer.class, customizers, builderReference[0]) |
78 | | - .invoke((customizer) -> builderReference[0] = customizer.customize(builderReference[0])); |
| 94 | + .invoke((customizer) -> builderReference[0] = customizer.customize(builderReference[0])); |
79 | 95 | return builderReference[0]; |
80 | 96 | } |
81 | 97 |
|
|
0 commit comments