Commit 4bcd02a5 authored by Stephane Nicoll's avatar Stephane Nicoll

Merge pull request #19880 from izeye

* pr/19880:
  Polish "Close TomcatMetrics on shutdown for cleanup"
  Close TomcatMetrics on shutdown for cleanup

Closes gh-19880
parents c3d0b9c4 7fd8cce4
/* /*
* Copyright 2012-2019 the original author or authors. * Copyright 2012-2020 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -25,6 +25,7 @@ import org.apache.catalina.Container; ...@@ -25,6 +25,7 @@ import org.apache.catalina.Container;
import org.apache.catalina.Context; import org.apache.catalina.Context;
import org.apache.catalina.Manager; import org.apache.catalina.Manager;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.boot.web.context.WebServerApplicationContext; import org.springframework.boot.web.context.WebServerApplicationContext;
import org.springframework.boot.web.embedded.tomcat.TomcatWebServer; import org.springframework.boot.web.embedded.tomcat.TomcatWebServer;
...@@ -38,12 +39,14 @@ import org.springframework.context.ApplicationListener; ...@@ -38,12 +39,14 @@ import org.springframework.context.ApplicationListener;
* @author Andy Wilkinson * @author Andy Wilkinson
* @since 2.1.0 * @since 2.1.0
*/ */
public class TomcatMetricsBinder implements ApplicationListener<ApplicationStartedEvent> { public class TomcatMetricsBinder implements ApplicationListener<ApplicationStartedEvent>, DisposableBean {
private final MeterRegistry meterRegistry; private final MeterRegistry meterRegistry;
private final Iterable<Tag> tags; private final Iterable<Tag> tags;
private volatile TomcatMetrics tomcatMetrics;
public TomcatMetricsBinder(MeterRegistry meterRegistry) { public TomcatMetricsBinder(MeterRegistry meterRegistry) {
this(meterRegistry, Collections.emptyList()); this(meterRegistry, Collections.emptyList());
} }
...@@ -57,7 +60,8 @@ public class TomcatMetricsBinder implements ApplicationListener<ApplicationStart ...@@ -57,7 +60,8 @@ public class TomcatMetricsBinder implements ApplicationListener<ApplicationStart
public void onApplicationEvent(ApplicationStartedEvent event) { public void onApplicationEvent(ApplicationStartedEvent event) {
ApplicationContext applicationContext = event.getApplicationContext(); ApplicationContext applicationContext = event.getApplicationContext();
Manager manager = findManager(applicationContext); Manager manager = findManager(applicationContext);
new TomcatMetrics(manager, this.tags).bindTo(this.meterRegistry); this.tomcatMetrics = new TomcatMetrics(manager, this.tags);
this.tomcatMetrics.bindTo(this.meterRegistry);
} }
private Manager findManager(ApplicationContext applicationContext) { private Manager findManager(ApplicationContext applicationContext) {
...@@ -80,4 +84,9 @@ public class TomcatMetricsBinder implements ApplicationListener<ApplicationStart ...@@ -80,4 +84,9 @@ public class TomcatMetricsBinder implements ApplicationListener<ApplicationStart
return null; return null;
} }
@Override
public void destroy() {
this.tomcatMetrics.close();
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment