【问题标题】:Call Spring actuator /restart endpoint from Spring boot using a java function使用 java 函数从 Spring Boot 调用 Spring actuator /restart 端点
【发布时间】:2016-12-15 12:01:34
【问题描述】:
我希望重新启动 Spring Boot 应用程序,因此使用 Spring Actuator /restart 端点正在使用 curl,但我希望使用应用程序内部的 java 代码调用相同的函数,我已经尝试过此代码,但它不起作用:
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
RestartEndpoint p = new RestartEndpoint();
p.invoke();
}
});
thread.setDaemon(false);
thread.start();
【问题讨论】:
标签:
java
spring
spring-boot
spring-cloud
spring-boot-actuator
【解决方案1】:
你需要注入RestartEndPoint:
@Autowired
private RestartEndpoint restartEndpoint;
...
Thread restartThread = new Thread(() -> restartEndpoint.restart());
restartThread.setDaemon(false);
restartThread.start();
它可以工作,即使它会抛出异常来通知您这可能会导致内存泄漏:
Web 应用程序 [xyx] 似乎启动了一个名为
[Thread-6] 但未能阻止它。这很可能会创建一个
内存泄漏。线程堆栈跟踪:
- 此问题/答案的未来读者请注意,RestartEndPoint 不包含在
spring-boot-actuator 中,您需要添加 spring-cloud-context 依赖项。
【解决方案2】:
- 在此处获取 json
@Autowired
private HealthEndpoint healthEndpoint;
public Health getAlive() {
return healthEndpoint.health();
}
- 添加自定义逻辑