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

geo*_*eek 1 java spring spring-boot spring-cloud spring-boot-actuator

我正在寻找重启弹簧启动应用程序,所以使用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();
Run Code Online (Sandbox Code Playgroud)

ale*_*xbt 13

您需要注入RestartEndPoint:

@Autowired
private RestartEndpoint restartEndpoint;

...

Thread restartThread = new Thread(() -> restartEndpoint.restart());
restartThread.setDaemon(false);
restartThread.start();
Run Code Online (Sandbox Code Playgroud)

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

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

  • 请注意,对于此问题/答案的未来读者,不包含RestartEndPointspring-boot-actuator,您需要添加spring-cloud-context依赖项.