使用 java 函数从 Spring Boot 调用 Spring actuator /restart 端点

Posted

技术标签:

【中文标题】使用 java 函数从 Spring Boot 调用 Spring actuator /restart 端点【英文标题】:Call Spring actuator /restart endpoint from Spring boot using a java function 【发布时间】: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();

【问题讨论】:

【参考方案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();

    添加自定义逻辑

【讨论】:

以上是关于使用 java 函数从 Spring Boot 调用 Spring actuator /restart 端点的主要内容,如果未能解决你的问题,请参考以下文章

java - 如何在spring boot java中编写一个函数来处理JPA存储库中的自定义查询?

Spring boot 注解@Async

#私藏项目实操分享#Spring Boot Serverless 实战 | 性能调优

对 Spring Boot 控制器的 Ajax 调用以重定向视图

Spring Boot 项目优化和 JVM 调优,亲测!真实有效。。

Spring Boot Serverless 实战系列 | 性能调优