Spring Boot 3 迁移后,Micrometer 无法在 Quartz 上运行

问题描述 投票:0回答:2

迁移到 Spring Boot 3 后,我将 spring-sleuth 更改为 Micrometer。更改后,traceId 或 spanId 不再在由 Quartz Jobs 管理的方法中生成。

如何解决?

spring-boot quartz-scheduler micrometer spring-micrometer micrometer-tracing
2个回答
0
投票

目前尚未实现(

@Scheduled
已计划),但现在,作为一种解决方法,您可以在 Quartz 将调用或创建的方法上添加
@Observerved
注释(+创建
ObservedAspect
bean)手动
Observation


0
投票

我最近遇到了类似的问题。解决步骤如下

问题的根本原因

  • Quartz 集成: Micrometer 不会自动跟踪 Quartz 作业,因为它们的执行上下文是独立的。
  • Spring AOP 限制: 通过 Spring AOP 自动跟踪可能不适用于在 Spring 控制之外运行的 Quartz 作业。

解决方案

  1. 手动仪表

    使用追踪器:

    
     import io.micrometer.tracing.Tracer;
    
     @Autowired
     private Tracer tracer;
    
     @Override
     public void execute(JobExecutionContext context) {
        var span = tracer.nextSpan().name("my-quartz-job").start();
        try (var ignoredSpanInScope = tracer.withSpan(span.start())) {
         // Job logic here
        } finally {
            span.end();
        }
     }
    
  2. 使用@Observed注释

    @Observed(name = "my-quartz-job")
    @Override
    public void execute(JobExecutionContext context) {
       // Job logic here
    }
    
  3. 自定义 AOP 方面

    创建一个 Aspect 来拦截 Quartz 作业执行并创建 Span:

    @Aspect
    @Component
    @AllArgConstructor
    public class QuartzJobTracingAspect {
        private final Tracer tracer;
    
        @Autowired
        public QuartzJobTracingAspect(Tracer tracer) {
           this.tracer = tracer;
        }
    
        @Pointcut("execution(* org.quartz.Job.execute(..))")
        public void quartzJobExecution() {}
    
        @Around("quartzJobExecution()")
        public Object traceQuartzJob(ProceedingJoinPoint point) {
           // Create and manage span here
        }
    }
    
  4. 千分尺配置

确保微米跟踪已启用并正确配置:

  management.metrics.export.trace.enabled=true

可选:配置跟踪后端(例如 Jaeger、Zipkin)

其他注意事项

  • 编译时编织:如果将 AspectJ 用于其他目的,请考虑为 Quartz 作业启用编译时编织。
  • 替代跟踪库:探索 OpenTelemetry 等库以获得更全面的跟踪功能。

故障排除

  • 验证 Micrometer 配置和跟踪后端设置。
  • 检查是否有冲突的库或配置问题。
  • 使用日志记录或调试来检查跨度创建和传播。
© www.soinside.com 2019 - 2024. All rights reserved.