我想知道是否有任何方法可以更新符号链接目标而不删除旧的符号链接。
我有两段代码,它们同时发生。第一部分是每小时下载一些数据并将其存储在 中/some/directory,并且它还将创建/most/recent/data指向新下载的数据的符号链接点。
第二部分将从 symlink 读取最新数据/most/recent/data。
下面是我当前创建符号链接的实现。但问题是,如果我们删除原来的符号链接,同时读取它,就会出现问题。有没有办法在不删除旧符号链接的情况下更新符号链接目标?
private void createSymLink(String symLinkPath, Path basePath) {
try {
Files.deleteIfExists(Paths.get(symLinkPath));
Files.createSymbolicLink(Paths.get(symLinkPath), basePath);
} catch (IOException e) {
}
}
Run Code Online (Sandbox Code Playgroud)
我想我刚刚找到了一些可能的解决方案。创建一个 tmp 符号链接,然后将其移至旧符号链接。因为移动是一个原子操作,所以符号链接更新也将是原子的。
private void createSymLink(String symLinkPath, Path basePath) {
try {
String tmpLink = "/tmp/tmpdir";
Files.createSymbolicLink(Paths.get(tmpLink), basePath);
Files.move(Paths.get(tmpLink), Paths.get(symLinkPath), ATOMIC_MOVE);
} catch (IOException e) {
}
}
Run Code Online (Sandbox Code Playgroud)