Skip to content
欢迎扫码关注公众号

WebFlux WebClient 动态配置示例

今天尝试了下使用 WebClient 来发起 HTTP 请求,使用起来还是挺方便的。

首先要添加 spring-boot-starter-webflux 依赖:

xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
    <version>3.1.5</version>
</dependency>

下面是一段动态配置 WebClient 的代码:

java
import me.liujiajia.www.common.core.enums.MyEnv;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpHeaders;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * WebClient 配置
 */
@Configuration
@RequiredArgsConstructor
@Slf4j
public class MyWebClientConfiguration {

    private static final Map<MyEnv, WebClient> clients = new HashMap<>();

    @PostConstruct
    public void initWebClients() {
        Arrays.stream(MyEnv.values()).forEach(env -> {
            clients.put(env, WebClient.builder()
                .baseUrl("svc-app-some-app.ns-" + env.name().toLowerCase())
                .defaultHeader(HttpHeaders.CONTENT_TYPE, "application/xml; charset=UTF-8")
                .build());
        });
    }

    public static WebClient getWebClient(MyEnv env) {
        return clients.getOrDefault(env, WebClient.create());
    }
}

使用示例:

java
// 转发消息到其他环境
Arrays.stream(MyEnv.values()).forEach(env -> {
    // 跳过开发环境和当前环境
    if (env == MyEnv.DEV || env == myConfig.getEnv()) return;
    log.info("转发消息到环境: {}", env);
    var stringMono = MyWebClientConfiguration.getWebClient(env).post()
        .uri("/my/portal", Map.of("signature", signature, "timestamp", timestamp, "nonce", nonce, "env", myConfig.getEnv().getValue()))
        .bodyValue(requestBody)
        .retrieve()
        .bodyToMono(String.class);
    log.info("转发结果: {}", stringMono.block());
});

Page Layout Max Width

Adjust the exact value of the page width of VitePress layout to adapt to different reading needs and screens.

Adjust the maximum width of the page layout
A ranged slider for user to choose and customize their desired width of the maximum width of the page layout can go.

Content Layout Max Width

Adjust the exact value of the document content width of VitePress layout to adapt to different reading needs and screens.

Adjust the maximum width of the content layout
A ranged slider for user to choose and customize their desired width of the maximum width of the content layout can go.