我正在用Java实现mongodb。每当我的应用程序启动时,都会为mongoDB创建新的连接池。有什么方法可以破坏该连接池并创建一个新的连接池,而无需重新启动应用程序。我知道如果mongoURI中的任何参数发生变化,连接池都会重新初始化,但是我想知道是否仍然可以在不对URI参数进行任何更改的情况下做到这一点,主要目的是销毁连接池并创建新的连接池。连接池!该连接池由MongoClient bean创建。因此,我想销毁并重新创建MongoClient Bean。
<bean id="monURI" class="com.mongodb.MongoClientURI">
<constructor-arg name="uri" value="${MONGO_URI}"/>
</bean>
<bean id="mongoC" class="com.mongodb.MongoClient">
<constructor-arg ref="monURI"/>
</bean>
答案 0 :(得分:2)
您可以共享一些代码,以便我们对您的具体情况提供更多帮助吗?
在我工作的地方,我们正在使用com.mongodb.MongoClient
。如果还使用它,则可以在销毁连接管理器组件之前调用mongoClient.close()
(使用Spring,因此我们在该组件的@PreDestroy方法中调用close()
)
-------编辑-------
在对这个答案发表评论之后,我将采用以下两种方法之一:
mongoClient.close()
和mongoClient = new MongoClient()
。@Autowire
MongoClientURI bean才能在创建的类中使用它。这个类的内容:;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.net.UnknownHostException;
@Component
public class MongoClientWrapper {
@Autowired
private MongoClientURI mongoClientURI;
private MongoClient mongoClient;
@PostConstruct
public void init() {
mongoClient = getNewMongoClientInstance();
}
@PreDestroy
public void beforeTearDown() {
mongoClient.close();
}
public void resetConnectionPool() {
mongoClient.close();
mongoClient = getNewMongoClientInstance();
}
private MongoClient getNewMongoClientInstance() {
MongoClient client = null;
try {
client = new MongoClient(mongoClientURI.getURI());
} catch (UnknownHostException e) {
e.printStackTrace();
} finally {
return client;
}
}
}
-----结束编辑-----