CouchBaseTemplate连接问题

时间:2016-01-08 11:40:26

标签: spring-mvc couchbase spring-data-couchbase couchbase-java-api

我有以下CouchBase模板Bean:

 @PostConstruct
public void initIt() throws Exception {
    if(couchbaseDisabled)
        return;
    couchbaseClient= new CouchbaseClient(
            bootstrapUris(Arrays.asList(hosts.split(","))),
            CouchbaseConstants.BUCKET,
            ""
    );
    couchbaseTemplate();
}



public void couchbaseTemplate() throws Exception {
    logger.info("Enabling CouchBase Template");
    couchbaseTemplate= new CouchbaseTemplate(couchbaseClient);
    //couchbaseTemplate.
}

@PreDestroy
public void cleanup() throws Exception {
    logger.info("Closing couchbase connection.");
    if (couchbaseClient != null) {
        couchbaseClient.shutdown();
        couchbaseTemplate=null;
        couchbaseClient=null;
    }
}

当服务器正在关闭时,我正在设置以下日志:

SEVERE: The web application [] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Jan 8, 2016 4:57:24 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@40c94525]) and a value of type [com.couchbase.client.deps.io.netty.util.internal.InternalThreadLocalMap] (value [com.couchbase.client.deps.io.netty.util.internal.InternalThreadLocalMap@5ddaa15d]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
Jan 8, 2016 4:57:24 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@40c94525]) and a value of type [com.couchbase.client.deps.io.netty.util.internal.InternalThreadLocalMap] (value [com.couchbase.client.deps.io.netty.util.internal.InternalThreadLocalMap@3c9810ce]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
Jan 8, 2016 4:57:24 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@40c94525]) and a value of type [com.couchbase.client.deps.io.netty.util.internal.InternalThreadLocalMap] (value [com.couchbase.client.deps.io.netty.util.internal.InternalThreadLocalMap@23776376]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
Jan 8, 2016 4:57:24 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@40c94525]) and a value of type [com.couchbase.client.deps.io.netty.util.internal.InternalThreadLocalMap] (value [com.couchbase.client.deps.io.netty.util.internal.InternalThreadLocalMap@7322ea2a]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.
Jan 8, 2016 4:57:32 PM org.apache.coyote.http11.Http11Protocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8099

这里可以做什么?

1 个答案:

答案 0 :(得分:0)

好的,所以你的应用程序中都运行了SDK 1.4.x和2.x(因为你的pom中有com.couchbase.client:java-client)。

线程泄漏消息来自后者。您必须在某处实例化Cluster(如com.couchbase.client.java.Cluster中所示)。 确保在应用程序生命周期结束时通过调用cluster.disconnect()来清理它(我猜测来自@PreDestroy方法,就像你对CouchbaseClient所做的那样)。

如果您还创建了自定义CouchbaseEnvironment,则还必须通过调用environment.shutdownAsync().toBlocking().single()将其正确关闭(与群集清理的方法相同)。

确保使用最新版本的2.x SDK,因为某些旧版本在关机时相对于正确的线程清理存在错误(请参阅JCBC-773JVMCBC-251问题)。