Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 除了设置';derby.system.home';系统属性?_Java_Derby - Fatal编程技术网

Java 除了设置';derby.system.home';系统属性?

Java 除了设置';derby.system.home';系统属性?,java,derby,Java,Derby,因此,我将derby用于患者管理学习项目。我使用以下代码为derby的数据库写入位置设置系统属性 Path path = Paths.get(System.getProperty("user.home"), "patient_management_databases"); System.getProperties().setProperty("derby.system.home", path.toString()); log.info(String.format("Set derby ho

因此,我将derby用于患者管理学习项目。我使用以下代码为derby的数据库写入位置设置系统属性

 Path path = Paths.get(System.getProperty("user.home"), "patient_management_databases");
 System.getProperties().setProperty("derby.system.home", path.toString());
 log.info(String.format("Set derby home to '%s'.", path.toString()));

我的问题是,对于要在生产中分发和使用的应用程序,这是否是一种良好的做法?更改derby主位置可能会导致使用derby的其他应用程序出现问题(我假设所有derby应用程序都将访问此属性)。是否有方法仅设置此应用程序的路径?它以前保存到我的项目文件夹中,但这并不理想,因为IDE索引和在使用VCS时必须忽略它们。

使用
System.getProperty(“user.home”)
是抽象系统路径的文件依赖性的好方法。使用Java的
路径
抽象也是将应用程序与底层文件系统解耦的正确方向上的又一步。因此,到目前为止,您所采取的步骤是好的,并且可能足以满足您的用例


但是,有多种方法可以让应用程序使用
derby.system.home
变量,它们在实用性和简单性方面都有所不同。我不可能描述所有的配置文件,但我建议您也尝试使用不同的机制加载配置文件——从文件系统、从类路径,甚至从远程服务器等。我能够通过以下代码获得我想要的行为:

private final Path databaseDirectory = Paths.get(System.getProperty("user.home"), "patient_management_databases");
String.format("jdbc:derby:%s/%s;create=true", databaseDirectory.toString(), databaseName);

我相信您的
setProperty
调用只会影响这个正在运行的Java进程,而不会影响同一系统上其他单独的Java进程。除非您是在复杂的环境(如应用服务器)中运行应用程序,否则您应该不会有问题。但是,如果您只想控制数据库数据的位置,那么可以使用JDBC连接URL轻松地实现这一点。@BryanPendleton感谢您的响应。我确实尝试过几次,但都失败了,但我设法弄清楚JDBCURL中的数据库名称指的是数据库的名称及其在驱动器上的位置。我能够通过以下代码获得我想要的行为:
String.format(“jdbc:derby:%s/%s;create=true”,path.toString(),databaseName)感谢您的帮助回复。