Apache PoolingHttpClientConnectionManager löst Ausnahmebedingung für ungültigen Status aus

Hier ist, wie ich es benutze -

private static final PoolingHttpClientConnectionManager connPool;

static {

        connPool = new PoolingHttpClientConnectionManager();
        // Increase max total connection to 200
        connPool.setMaxTotal(200);//configurable through app.properties
        // Increase default max connection per route to 50
        connPool.setDefaultMaxPerRoute(20);//configurable through app.properties

}

CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionManager(connPool) .build();

Also habe ich endlich einen Block um http GET gesetzt -

finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                LOGGER.error(e.getMessage());   
            }
        }

Hier ist mein Stacktrace -

java.lang.IllegalStateException: Connection pool shut down
    at org.apache.http.util.Asserts.check(Asserts.java:34)
    at org.apache.http.pool.AbstractConnPool.lease(AbstractConnPool.java:169)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.requestConnection(PoolingHttpClientConnectionManager.java:217)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:157)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
    at com.A.B.C.CustomHttpClient.doGETAndValidate(CustomHttpClient.java:44)
    at com.A.B.C.SiteMonitorTask.monitorAndUpdateEndPoints(SiteMonitorTask.java:48)
    at com.A.B.C.SiteMonitorTask.run(SiteMonitorTask.java:37)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

Ich verwende Quartz, um einen Job zum Überwachen von HTTP-Endpunkten zu planen. Hier ist meine Konfiguration des Verbindungspools.

totalMaxHttpConn=200
maxHttpConnPerRoute=20

Maven Abhängigkeit .. Artefaktversion

httpclient 4.3.1
httpcore 4.3.1

BEARBEITE - Nun, das Problem wurde dadurch gelöst, dass CloseableHttpClient im finally-Block nicht geschlossen wurde. Kann jemand sagen, warum es sich so verhält?Warum wird der Verbindungspool heruntergefahren, wenn ich einen Client schließe?

Ist der obige closeablehttpclient ein Handle zum Pool und kein einzelner conn

Antworten auf die Frage(2)

Ihre Antwort auf die Frage