【问题标题】: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】:
      1. 在此处获取 json
      @Autowired
      private HealthEndpoint healthEndpoint;
      
      public Health getAlive() {
          return healthEndpoint.health();
      }
      
      1. 添加自定义逻辑

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-15
        • 2016-06-01
        • 2016-03-27
        • 2016-09-07
        • 2021-04-24
        • 1970-01-01
        • 2021-08-25
        • 2020-05-16
        相关资源
        最近更新 更多