迁移到 Spring Boot 3 后,我将 spring-sleuth 更改为 Micrometer。更改后,traceId 或 spanId 不再在由 Quartz Jobs 管理的方法中生成。
如何解决?
@Scheduled
已计划),但现在,作为一种解决方法,您可以在 Quartz 将调用或创建的方法上添加 @Observerved
注释(+创建 ObservedAspect
bean)手动 Observation
:
我最近遇到了类似的问题。解决步骤如下
问题的根本原因
解决方案
手动仪表
使用追踪器:
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();
}
}
使用@Observed注释
@Observed(name = "my-quartz-job")
@Override
public void execute(JobExecutionContext context) {
// Job logic here
}
自定义 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
}
}
千分尺配置
确保微米跟踪已启用并正确配置:
management.metrics.export.trace.enabled=true
其他注意事项
故障排除