首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redisson:在finalize方法中关闭客户端

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

Stack Overflow用户
提问于 2018-04-27 05:08:22
回答 1查看 2.3K关注 0票数 2

我正在为redission客户机编写一个适配器,以便在我们的应用程序中使用,我不确定关闭finalize块中的客户端是否是一个好的设计。下面是密码。请让我知道

代码语言:javascript
复制
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;
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-27 07:38:36

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

由于这个原因,许多人将完全摆脱finalize()方法。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50055602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档