gpt4 book ai didi

java - Redisson:在finalize方法中关闭客户端

转载 作者:行者123 更新时间:2023-11-30 06:11:54 25 4
gpt4 key购买 nike

我正在为 redission 客户端编写一个适配器以在我们的应用程序中使用,我不确定在 Finalize block 中关闭客户端是否是一个好的设计。下面是代码。请告诉我

private static final RedissonClient client;

static {
File configFile = Paths.get(Constants.ConfigDir, "cache-
config.yml").toFile();
try {
client = Redisson.create(Config.fromYAML(configFile));
} catch (IOException e) {
throw new UnableToCreateCacheClientException(e.getMessage() + e.getStackTrace(), e.getCause());
}
}

@Override
protected void finalize() throws Throwable {
super.finalize();
client.shutdown();
}

public static RedissonClient getClient() {
return client;
}

编辑:我有兴趣了解关闭网络应用程序中静态最终连接对象的正确设计。我无法在方法的finally block 中关闭它,因为客户端将被多个类中的多个方法使用

最佳答案

您不应该依赖 finalize() 方法来关闭客户端 - 您应该确保在其他地方关闭它。 Finalize() 仅在对象被垃圾回收时才会被调用,这可能是在客户端应该关闭之后很长时间(也可能永远不会,具体取决于程序的生命周期和 gc 选项。)

出于这个原因,许多人会完全摆脱 Finalize() 方法。

如果您确实将其留在那里,则只需将其视为备份以捕获上游的编码错误。首先检查客户端是否关闭,如果没有关闭,请确保打印一条警告消息,表明您遇到了需要解决的错误!

关于java - Redisson:在finalize方法中关闭客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50055602/

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