将 SymmetricDS 连接到现有的 H2 数据库文件
Connect SymmetricDS to an Existing H2 Databse File
我有一个 H2 数据库文件,我需要使用 SymmetricDS 进行复制。
我可以使用这个 url:
在嵌入式模式下从 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 class 的静态块 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 的源代码必须修改才能解决。
此行为无法完全禁用,但可以通过设置 -Dh2.baseDir 而 运行 SymmetricDS 来覆盖它。原答案是here
我有一个 H2 数据库文件,我需要使用 SymmetricDS 进行复制。
我可以使用这个 url:
在嵌入式模式下从 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 class 的静态块 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 的源代码必须修改才能解决。
此行为无法完全禁用,但可以通过设置 -Dh2.baseDir 而 运行 SymmetricDS 来覆盖它。原答案是here