Я создаю приложение JAX-RS на Джерси 2.30. Я запускаю соединение Rabbit-MQ и использую AbstractBinder
, чтобы иметь возможность вводить его в нескольких местах и поддерживать соединение в фоновом режиме. Когда я закрываю приложение, я не могу найти способ закрыть соединение. Кажется, что метод dispose
не вызывается.
Когда я закрываю tomcat, поток остается живым и препятствует выходу JVM. Как я могу закрыть соединение при выгрузке веб-приложения (в основном, когда Tomcat выключается)?
public class ConnectionBinder extends AbstractBinder {
@Override
protected void configure() {
bindFactory(ConnectionFactoryWrapper.class).to(Connection.class);
}
}
public class ConnectionFactoryWrapper implements DisposableSupplier<Connection> {
private static final Logger LOG = LogManager.getLogger(ConnectionFactoryWrapper.class);
@Override
public void dispose(Connection connection) {
try {
if (connection != null) {
connection.close();
}
} catch (IOException e) {
LOG.fatal("Failed to close connection to broker: " + e.getMessage());
}
}
@Override
public Connection get() {
ConnectionFactory factory = new ConnectionFactory();
// here we do some config for username and pw
try {
return factory.newConnection();
} catch (IOException | TimeoutException e) {
LOG.fatal("Failed to open connection: " + e.getMessage());
}
return null;
}
}
@ApplicationPath("app")
public class BrokerApplication extends ResourceConfig {
public BrokerApplication() {
///...
register(new ConnectionBinder());
///...
packages("x.x.x.broker.resources");
}
}