diff --git a/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/zipkin2/ZipkinAutoConfiguration.java b/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/zipkin2/ZipkinAutoConfiguration.java index 1b1559997..6afb46530 100644 --- a/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/zipkin2/ZipkinAutoConfiguration.java +++ b/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/zipkin2/ZipkinAutoConfiguration.java @@ -135,6 +135,22 @@ public class ZipkinAutoConfiguration { .messageTimeout(zipkin.getMessageTimeout(), TimeUnit.SECONDS).metrics(reporterMetrics) .build(zipkin.getEncoder()); + Runtime.getRuntime().addShutdownHook(new Thread() { + @Override + public void run() { + log.info("Flushing remaining spans on shutdown"); + asyncReporter.flush(); + try { + Thread.sleep(TimeUnit.SECONDS.toMillis(zipkin.getMessageTimeout()) + 500); + log.debug("Flushing done - closing the reporter"); + asyncReporter.close(); + } + catch (Exception e) { + throw new IllegalStateException(e); + } + } + }); + return asyncReporter; }