使用java函数从Spring引导调用Spring执行器/重启端点

时间:2016-08-09 12:27:39

标签: java spring spring-boot spring-cloud spring-boot-actuator

我正在寻找重新启动spring boot应用程序,所以使用Spring Actuator / restart端点正在使用curl,但是我想在app中使用java代码调用相同的函数,我试过这段代码,但它不起作用:

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        RestartEndpoint p = new RestartEndpoint();
        p.invoke();
    }
});
thread.setDaemon(false);
thread.start();

2 个答案:

答案 0 :(得分:12)

您需要注入RestartEndPoint:

@Autowired
private RestartEndpoint restartEndpoint;

...

Thread restartThread = new Thread(() -> restartEndpoint.restart());
restartThread.setDaemon(false);
restartThread.start();

它可以工作,即使它会抛出一个异常通知你这可能会导致内存泄漏:

  

Web应用程序[xyx]似乎已经启动了一个名为的线程   [Thread-6]但未能阻止它。这很有可能创造一个   内存泄漏。堆栈线程跟踪:

  • 请注意,此问题/答案的未来读者,重新启动未包含在spring-boot-actuator中,您需要添加spring-cloud-context依赖项。

答案 1 :(得分:0)

  1. 在此处获取json
@Autowired
private HealthEndpoint healthEndpoint;

public Health getAlive() {
    return healthEndpoint.health();
}
  1. 添加自定义逻辑