在 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 ");
}
}
我在 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 ");
}
}