繁体   English   中英

如何在Spring-boot中为每个REST API请求创建唯一的Id?

[英]How to create unique Id per request for REST API in Spring-boot?

我需要让我的日志(log4j引擎)在Spring-Boot应用程序中为每个REST API请求提供一个唯一的id来提供更多信息。

我想避免使用一个获得requestId字段并从中扩展的超类。

我试图在网上寻找一个很好的例子,但不是那么清楚。

我有什么最佳实践可以使用吗?

使用字段来实现这样的功能只会在第一眼看到集成测试时出现问题。

理想情况下,只需遵循SRP原则并将生成逻辑包含在专用类中,您可以创建可注入的@Component .. MyIdGenerator等。

在那里你可以有一个synchronized方法generateId()

现在,您可以在任何需要的控制器中使用它,并且您可以更轻松地设置集成测试并对其进行更多控制。

更新:

如果这应该是一个全局策略,你也可以利用HandleInterceptorAdapter

@Component
public class RequestInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

    /* generate unique id here and log what is needed */

    }

您可以封装ID生成并在此类中记录。

有几种最佳实践如下:

  1. 使用AOP参考: 用于控制器层的AOP
  2. 使用MDC
  3. 将MDC与AOP MDC和AOP一起使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM