Java - 设置首选项后备存储目录

标签 java linux jvm preferences

我需要在我的 Java 应用程序中创建一个持久存储,以便所有用户都可以访问它。所以我正在研究 java.util.prefs.Preferences 并使用 systemRoot() 在 Windows 上对我来说很好,在 Register 保存数据。 但我确实在 Linux (Ubuntu) 上遇到了一些问题。我想使用我们的其他应用程序已经使用的目录:/usr/share/。 因此,我试图在运行时将 systemRoot 默认目录重定向到/usr/share。这是我的代码:

System.setProperty("java -Djava.util.prefs.systemRoot", "/usr/share/myfolder");
Preferences pref = Preferences.systemRoot().node("/usr/share/myfolder");

根据这个site ,我必须在执行此命令行之前创建 .systemPrefs 文件夹,它暗示 systemRoot() 将使用它。

当我执行我的程序时,我收到以下警告: java.util.prefs.FileSystemPreferences syncWorld 警告无法刷新系统首选项:java.util.prefs.BackingStoreException:/etc/.java/.systemPrefs/usr 创建失败。

所以我假设 System.setProperty 不工作。有什么建议吗? 提前致谢!

最佳答案

这是一个非常讨厌的问题,Java 在基于 *nix 的服务器上运行。

我能够通过使用以下 vm args 来解决它:

-Djava.util.prefs.userRoot=/opt/apache-tomcat-7.0.50/uprefs -Djava.util.prefs.systemRoot=/opt/apache-tomcat-7.0.50/sprefs

尽管在 systemRoot 路径上有一个重要注意事项,但要在其中创建一个名为 .systemPrefs 的子文件夹,否则它将不起作用。

此外,不要忘记将这些目录chown -R 给运行 java 应用程序的用户(在我的例子中是 tomcat)。

关于Java - 设置首选项后备存储目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15004954/

相关文章:

java - 如何 Autowiring 继承的Spring服务?

java - 从网站获取文本并将其放入一行?

java - 如何将 BigDecimal (Java) 值存储在 Real (SQlite) 列中?

linux - bash中变量名后的2个逗号是什么意思?

Java 调试器 : Is it possible selectively suspend threads?

performance - 哪种方法在 java 中生成线程转储最不显眼?

java - Android 通过 Fragment 或 Activity 中的按钮更新 Widget

c++ - 如果没有公开任何标准符号,则让最近的 C++ 编译 .so 在旧系统上运行

Linux try_cmpxchg神秘的内联汇编

java - JVM 是否可以选择自动加密其内存?