安全关闭 Xodus 环境的正确方法是什么?
What is the proper way of safely shutdown the Xodus environment?
我需要一种关闭 Xodus 环境的方法,以便
- 它等待所有线程中的所有写入事务完成(或者作为一种选择在超时后中止)。
- 它阻止开始新的事务(或抛出异常作为选项)。
- 安全关闭环境。
到目前为止我们尝试了类似的方法
if (env.isOpen()) {
env.clear();
env.close();
}
但我不确定它是否完全正确,我仍然不时收到 env.close()
抛出的异常。那么正确的做法是什么?
首先,请注意 Environment#clear()
只是清除您环境中的所有数据。
次要:您不必在关闭之前检查您的环境是否打开。
如果您不太关心应用程序状态,那么您可以在环境创建中设置 exodus.env.closeForcedly
选项:
Environment env = Environments.newInstance("db path", new EnvironmentConfig().setEnvCloseForcedly(true));
在这种情况下,close()
方法会在日志中报告当前未完成事务的数量,并且无论如何都会关闭环境。
我需要一种关闭 Xodus 环境的方法,以便
- 它等待所有线程中的所有写入事务完成(或者作为一种选择在超时后中止)。
- 它阻止开始新的事务(或抛出异常作为选项)。
- 安全关闭环境。
到目前为止我们尝试了类似的方法
if (env.isOpen()) {
env.clear();
env.close();
}
但我不确定它是否完全正确,我仍然不时收到 env.close()
抛出的异常。那么正确的做法是什么?
首先,请注意 Environment#clear()
只是清除您环境中的所有数据。
次要:您不必在关闭之前检查您的环境是否打开。
如果您不太关心应用程序状态,那么您可以在环境创建中设置 exodus.env.closeForcedly
选项:
Environment env = Environments.newInstance("db path", new EnvironmentConfig().setEnvCloseForcedly(true));
在这种情况下,close()
方法会在日志中报告当前未完成事务的数量,并且无论如何都会关闭环境。