我有一个关于关闭资源(AutoCloseable与否)的问题,这些资源是Java类的静态成员。在我的特殊情况下,我有一个类使用静态MongoClient实例变量来管理与MongoDB实例的连接。当应用程序终止时,我如何确保文档建议关闭此客户端?我使用这个类作为Java webapp后端的一部分,它运行在一个容器(Tomcat 7)中。我无法覆盖Object的finalize()方法来关闭客户端,因为在类的实例上调用它并且对静态成员没有影响吗?这是我的示例代码:
public class MyManager {
//This needs to be closed when the application terminates
private static MongoClient CLIENT;
static {
...
CLIENT = new MongoClient("localhost", 27017);
...
}
public static DB getSomeDB(String dbName) {
return CLIENT.getDB(dbName);
}
//more factory methods
...
//Would this work?
@Override
protected void finalize() throws Throwable {
CLIENT.close();
}
}
有人能告诉我如何最好地处理这种情况,并且通常使用数据库连接或JDBC驱动程序等资源吗?谢谢!
答案 0 :(得分:-1)
我们正在使用Spring,只需创建一个在被销毁后调用close()
方法的bean:
@Bean(name = "mongoClient", destroyMethod = "close")
public MongoClient mongoClient() throws MongoException, UnknownHostException {
...