SymmetricDSを使用して複製する必要がある H2 データベース ファイルがあります。
次の 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.
ただし、次の URL が symmetricds のノード プロパティ ファイルで使用されている場合、すべて正常に動作しますが、データベースは 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。
しかし、このオプションはどのように自動的に設定され、どのように無効にされるのでしょうか..?
この問題について広範な調査を行った結果、根本原因はSymmetricDSのAbstractCommandLauncherクラスの静的ブロックであることが判明しました。
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のソース コードを修正して解決する必要があります。