我需要使用SymmetricDS复制H2数据库文件。
我可以使用此网址以嵌入模式从Web控制台访问数据库:
jdbc:h2:file:E:/Folder/database;AUTO_SERVER=TRUE;IFEXISTS=TRUE;
但是在symmtericds的节点属性文件中使用相同的url会引发以下错误:
ERROR [server-000] [AbstractSymmetricEngine] [symmetric-engine-startup-0] Could not get a connection to the database: Cannot create PoolableConnectionFactory (IO Exception: "E:/Folder/database outside D:/symmetric-server-3.7.26/tmp/h2" [90028-182]). Waiting for 10 seconds before trying to connect to the database again.
虽然如果在symmetricds的节点属性文件中使用以下url,一切正常但数据库是在symmetric-server-3.7.26 / tmp / h2目录中创建的。
jdbc:h2:file:database;AUTO_SERVER=TRUE;
在过去的几天里我没有运气解决这个问题。
非常感谢任何形式的帮助。
通过H2文档我发现这种行为是由于-baseDir选项:http://www.h2database.com/html/advanced.html#remote_access。
但是如何自动设置此选项以及如何禁用它??
对该问题做了一些广泛的研究,根本原因结果是 AbstractCommandLauncher 类SymmetricDS的静态块:
static {
String symHome = System.getenv("SYM_HOME");
if (symHome == null) {
symHome = ".";
}
System.setProperty("log4j.sym.home", symHome);
if (isBlank(System.getProperty("h2.baseDir"))) {
System.setProperty("h2.baseDir", symHome + "/tmp/h2");
}
DEFAULT_SERVER_PROPERTIES = System.getProperty(SystemConstants.SYSPROP_SERVER_PROPERTIES_PATH, symHome + "/conf/symmetric-server.properties");
log = LoggerFactory.getLogger(AbstractCommandLauncher.class);
initFromServerProperties();
}
事实证明,必须修改SymmetricDS的源代码才能解决它。