首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SymmetricDS连接到现有的H2数据库文件

将SymmetricDS连接到现有的H2数据库文件
EN

Stack Overflow用户
提问于 2015-11-28 13:53:14
回答 1查看 524关注 0票数 0

我有一个H2数据库文件,需要使用SymmetricDS进行复制。

我可以在嵌入式模式下从web控制台访问数据库,使用这个url:

代码语言:javascript
复制
jdbc:h2:file:E:/Folder/database;AUTO_SERVER=TRUE;IFEXISTS=TRUE;

但是,在symmtericds的节点属性文件中使用相同的url会引发以下错误:

代码语言:javascript
复制
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,但是数据库是在对称服务器-3.7.26/tmp/h2目录中创建的。

代码语言:javascript
复制
jdbc:h2:file:database;AUTO_SERVER=TRUE;

在过去的几天里,我一直没有找到解决这个问题的办法。

任何形式的帮助都会受到极大的感谢。

通过H2文档,我发现这种行为是由于-baseDir选项:访问造成的。

但是,如何自动设置此选项,以及如何禁用它..?

在这个问题上做了大量的研究,根本原因是AbstractCommandLauncher类SymmetricDS的静态块。

代码语言:javascript
复制
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的源代码才能解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-10 15:01:38

此行为不能完全禁用,但可以通过在运行-Dh2.baseDir时设置SymmetricDS来重写它。最初的答案是这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33972108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档