在 spring 引导应用程序中以编程方式调用 spring 云配置 actuator/env post 端点

Programmatically call spring cloud config actuator/env post endpoint in spring boot application

我在 spring 引导应用程序中使用 spring 云配置,我正在尝试通过 actuator/env post 端点更新 属性 值。

这是我的代码:

@Service
public class ActuatorRefreshService {

  private final String inventoryModeKey = "inventory.initial.mode";
  private WebClient webClient = WebClient.builder().build();

  @Autowired
  public ActuatorRefreshService() {
  }

  public void refreshStatus(String latestMode) {
    Map<String, String> bodyMap = new HashMap();
    bodyMap.put("name",inventoryModeKey);
    bodyMap.put("value",latestMode);
    webClient.post().uri("/actuator/env")
            .header(HttpHeaders.CONTENT_TYPE, String.valueOf(MediaType.APPLICATION_JSON))
            .body(Mono.just(bodyMap), Map.class).retrieve().onStatus(HttpStatus::isError, clientResponse -> {
        return Mono.error(new Exception("error"));
    }).bodyToMono(String.class);
    System.out.println("call actuator endpoint to update the value");

  }
}

当我调用调用此 refreshStatus 方法的休息端点时。 api returns me 200 状态。之后我点击 localhost:8080/actuator/refresh。当我检查更新值时,它显示 __refreshAll__.

我不知道为什么会这样??任何帮助将不胜感激。

注意:* 当我从 postman 到达端点 localhost:8080/actuator/env 并刷新时,它会更新属性.*

我也尝试了 localhost:8080/actuator/busenv 总线端点,但仍然没有成功。 有人试过这种要求吗?

我能够使用 RestTemplate in spring 在 spring 引导中以编程方式调用此 api localhost:8080/actuator/busenv。它也在应用程序上下文中刷新配置。我不确定为什么它不能与 WebClient 一起使用。

如果其他人正在寻找相同的要求,请发布答案。

请找到下面的代码

@Service
public class ActuatorRefreshService {

   private final String inventoryModeKey = "inventory.initial.mode";

   @Autowired
   public ActuatorRefreshService() {
   }

   public void refreshInventoryMode(String latestMode) {
      Map<String, String> bodyMap = new HashMap();
      bodyMap.put("name",inventoryModeKey);
      bodyMap.put("value",latestMode);
      final String url = "http://localhost:8080/actuator/busenv";

      RestTemplate restTemplate = new RestTemplate();
      HttpHeaders headers = new HttpHeaders();
    


      headers
      .setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));

      HttpEntity<Object> entity = new HttpEntity<>(bodyMap, headers);
      restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
      System.out.println("call actuator endpoint to update the value ");

}

}