我是ektorp和spring的新手。所以请不要向我扔石头:)。我们有现成的应用程序用php / couchdb编写,现在将其移动到java / spring / couchdb。我已经按照文档如何配置和编写代码。当我运行junit测试代码工作正常,但在暂存环境(Debian)中我看到套接字没有被释放,这最终导致了太多的打开文件错误。 DBConnection对象注释为存储库。我没有使用ektorp spring而且没有通过context.xml配置ektorp
以下是配置代码
private StdCouchDbConnector couchDbConnectior;
public CouchDbConnector getConnection() {
if (null != couchDbConnectior) {
return couchDbConnectior;
} else {
return createConnection();
}
}
private CouchDbConnector createConnection() {
StdCouchDbInstance dbInstance = null;
if (null != host || !host.equalsIgnoreCase("null")) {
try {
HttpClient httpClient = new StdHttpClient.Builder()
.url(host)
.port(new Integer(port))
.username(key1)
.password(key2)
.maxConnections(new Integer(maxConnections))
.connectionTimeout(100000)
.socketTimeout(100000)
.cleanupIdleConnections(true)
.build();
dbInstance = new StdCouchDbInstance(httpClient);
} catch (MalformedURLException ex) {
log.error("Cannot create CouchDB connection", ex);
}
}
if (null != dbInstance) {
return dbInstance.createConnector(dataBaseName, false);
} else {
return null;
}
}
正如我前面提到的,连接本身工作正常。问题是当我在tomcat中运行代码时,在阶段环境中套接字没有被释放,我看到很多打开的套接字连接状态为CLOSE_WAIT,我知道它们被卡住了,因为进程在午夜运行,我在上午11点检查了系统。 这是我在运行lsof connand时看到的内容
java 604 root 44u IPv6 53620 0t0 TCP ip_of_couch_db(CLOSE_WAIT)
任何帮助将不胜感激。