在Java中关闭静态资源

时间:2014-11-29 20:52:34

标签: java mongodb static

我有一个关于关闭资源(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驱动程序等资源吗?谢谢!

1 个答案:

答案 0 :(得分:-1)

我们正在使用Spring,只需创建一个在被销毁后调用close()方法的bean:

@Bean(name = "mongoClient", destroyMethod = "close")
public MongoClient mongoClient() throws MongoException, UnknownHostException {
    ...