【问题标题】:how to switch from h2 embedded to server mode如何从 h2 嵌入式切换到服务器模式
【发布时间】:2021-03-25 15:13:45
【问题描述】:

我有一个 jhipster 网关,它启动一个嵌入式 h2 控制台(只能从内部访问),这个网关在我们用于测试目的的服务器上的 docker 内运行。 我生成了一个空的 cypress 项目,它将测试部署的 ui,并通过我的网关向其他服务发出请求。

我生成了另一个 spring boot 应用程序,它将进行 api 调用,直接在我的数据库中保存/删除/获取/编辑数据。

此应用程序将用于 cypress 发出请求并同时测试数据库。

步骤如下: 如果一切正常,赛普拉斯测试和所需的休息调用将在本地编写,它将被推送。 使用管道推送后,我的测试将运行并测试我部署的用户界面。

我的问题从本地测试开始,我的 api 无法访问我的 h2 db fom 网关,因为它在它里面并且没有为其他应用程序打开,如果它们在同一个 docker 里面是可能的,但这不是case 和本地我不想使用 docker。

我在这里读到:https://jsoftbiz.wordpress.com/2011/04/30/share-an-h2-in-memory-database-among-several-jvms/ h2 可以作为可从其他应用程序访问的服务器运行。我尝试将那里的配置添加到网关内的 h2.server.properties 中,但它仍然开始嵌入。

我的问题知道是否有另一种方法可以将我的 h2 db 配置为可从外部访问?

这样做的好处是拥有一个测试数据库,而不是分别用于本地和服务器。

【问题讨论】:

    标签: database spring-boot rest automated-tests jhipster


    【解决方案1】:

    JHipster 已经为您做到了。

    看看DatabaseConfiguration 类,它在h2TCPServer() 方法中。它找到一个可用的端口来监听并记录它,通常是http端口+10000,见getValidPortForH2()方法。

    因此 H2 是嵌入的,但可以被 DBeaver 等外部应用程序访问。

    外部JDBC URL应该是这样的:

    jdbc:h2:tcp://localhost:<port>/<database name>:<application name>;DB_CLOSE_ON_EXIT=FALSE
    

    请注意,它仅适用于 dev 个人资料,因为它不安全。

    【讨论】:

    • 嗨,当我尝试连接到我的数据库时出现以下错误:数据库 URL “jdbc:h2:tcp: 中不允许隐式相对于当前工作目录的文件路径: //localhost:18088/gateway:gateway;DB_CLOSE_ON_EXIT=FALSE;FORBID_CREATION=TRUE"。请改用绝对路径、~/name、./name 或 baseDir 设置。 [90011-200] 90011/90011(帮助)
    • 你是使用 h2 文件存储还是在 mem 中?检查 H2 文档 h2database.com/html/features.html#database_url 以了解所有可能性。
    • 我可以通过这个连接所以我猜是文件:jdbc:h2:file:./target/h2db/db/gateway
    • 是服务器模式的问题,我使用的是文件存储吗?
    • 不,这只是意味着 url 可能与我发布的不同,因为我使用 mem,请尝试我链接的 h2 文档中的不同可能性。
    猜你喜欢
    • 2021-06-03
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2015-02-16
    • 2014-06-04
    • 2014-04-30
    相关资源
    最近更新 更多