gpt4 book ai didi

java - Java中关闭静态资源

转载 作者:行者123 更新时间:2023-12-01 06:14:51 24 4
gpt4 key购买 nike

我有一个关于关闭属于 Java 类的静态成员的资源(是否可自动关闭)的问题。在我的特定情况下,我有一个类使用静态 MongoClient 实例变量管理与 MongoDB 实例的连接。当我的应用程序终止时,如何确保该客户端按照文档的建议关闭?我使用此类作为在容器(Tomcat 7)中运行的 Java Web 应用程序后端的一部分。我无法重写对象的 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 驱动程序等资源的情况吗?谢谢!

最佳答案

我们使用 Spring 并简单地创建一个 bean,在销毁后调用 close() 方法:

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

关于java - Java中关闭静态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27206994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com