当前位置: 首页 > 知识库问答 >
问题:

Spring引导执行器-如何向/关闭endpoint添加自定义逻辑

万开畅
2023-03-14

在我的项目中,我开始使用Spring靴执行器。我使用/shutdownendpoint优雅地停止嵌入的Tomcat(这很好用),但是在关闭期间我还需要执行一些自定义逻辑。有没有办法,怎么做?

共有1个答案

景明诚
2023-03-14

在关闭应用程序之前,我可以想到两种执行某些逻辑的方法:

  1. 注册筛选器,它毕竟是一个web应用程序。
  2. 使用@before通知
  3. 拦截 invoke方法

由于/shutdown是Servletendpoint,因此可以注册过滤器,以便在调用/shutdownendpoint之前运行:

public class ShutdownFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request,
                                    HttpServletResponse response,
                                    FilterChain filterChain) 
                                    throws ServletException, IOException {
        // Put your logic here
        filterChain.doFilter(request, response);
    }
}
@Bean
@ConditionalOnProperty(value = "endpoints.shutdown.enabled", havingValue = "true")
public FilterRegistrationBean filterRegistrationBean() {
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    registrationBean.setFilter(new ShutdownFilter());
    registrationBean.setUrlPatterns(Collections.singleton("/shutdown"));

    return registrationBean;
}
@Aspect
@Component
public class ShutdownAspect {
    @Before("execution(* org.springframework.boot.actuate.endpoint.ShutdownEndpoint.invoke())")
    public void runBeforeShutdownHook() {
        // Put your logic here
        System.out.println("Going to shutdown...");
    }
}
@SpringBootApplication
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class Application { ... }

Spring-Aspects依赖项:

compile 'org.springframework:spring-aspects'
 类似资料:
  • 我第一次使用Spring Boot应用程序时,执行器是不安全的,所以很容易通过/acture/shutdownendpoint远程关闭。最近,我已经使用Spring安全保护了我的执行器,它已经起作用了。现在我需要提供http基本凭据来访问endpoint,但现在对/acture/shutdownendpoint的curl调用失败,出现禁止错误。我一定是配置不正确的地方。 我的卷曲命令: 我的配置:

  • http://localhost:8080/myapp/apphealth 只需要名称更改,而不需要执行器/运行状况的响应。有可能吗?

  • 如何在SpringBoot中实现自定义endpoint以实现以下目标: 其中“Custom”是我想要实现的扩展健康的endpoint。

  • 我阅读了如何以正确的方式关闭一个Spring Boot应用程序?,所以我尝试使用http关闭endpoint来关闭我的Spring Boot嵌入式tomcat应用程序。 有没有办法只挂起关闭endpoint,这样我就可以检查请求者IP了?

  • 我正在我的项目中使用模块,该模块公开了要监视的RESTendpointURL 默认情况下,仅公开 和 终结点。 根据我的使用案例,我正在通过< code > application . properties 文件自定义endpoint。 我想了解,Spring启动究竟在哪里为和创建实际的endpoint,以及它如何通过HTTP公开它们?

  • 春奴B:好的。我从一个STS Spring Starter项目/Maven/Java8/Spring Boot2.0开始,并选择Web和致动器依赖项。它构建和运行良好,并转发到http://localhost:8080/acturet/health。我在主应用程序类中添加了一个“endpoint”,使其看起来像这样。