0

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のソース コードを修正して解決する必要があります。

4

1 に答える 1

0

この動作を完全に無効にすることはできませんが、SymmetricDS の実行中に -Dh2.baseDir を設定することで無効にすることができます。元の答えはここにあります

于 2015-12-10T15:01:38.830 に答える