【问题标题】:Using both in-memory and production database in Spring Boot application在 Spring Boot 应用程序中同时使用内存和生产数据库
【发布时间】:2017-03-31 22:26:10
【问题描述】:

我正在尝试开始使用 spring-boot 与数据库的集成。

我已阅读官方29.1 Configure a DataSource 主题,这对我来说非常清楚。

我想用Heroku 发布我的应用程序,所以我查看了官方sample 项目配置。

pom.xml的一部分:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    //...
    <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
    </dependency>
    //...
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.4-1203-jdbc42</version>
    </dependency>
    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
        <version>3.4.1</version>
    </dependency>

我现在想知道,将 hsqldb 之类的内存数据库与普通的生产型数据库(此处为 postgres)一起使用的目的是什么?什么情况下有用?

更重要的是,这将如何运作?

编辑

Ofc,在我提到的示例项目中,我遗漏了一些东西。 application.properties 中的注释解释了为什么使用 hsql:

# Database Config
# Un-comment these lines to connect to a database. When commented out, you automatically get an in-memory-database.
#spring.jpa.hibernate.ddl-auto=update

【问题讨论】:

    标签: java spring-boot hsqldb in-memory-database


    【解决方案1】:

    我有两个案例:

    1. 测试目的——你可以在进行自动化测试时使用它,这样你就不需要设置像数据库这样的“真实”产品,而是有一些东西可以设置 hsql 并填充它——可以节省大量资源

    2. 内存中缓存 - 在您不仅需要键值缓存,而且更灵活的情况下,例如基于过滤器的提取(可以以不同方式组合的多个键)HSQL 非常适合它,因为您可以在 hypersql 中缓存所有内容(或其中的一部分),并且从中提取比从“真实”数据库中提取要快得多。此外,您可以使用它来缓存一些基于数据库数据的业务逻辑结果,并将这些结果从 HyperSQL 提供给任何请求 - 这可以大大节省处理时间

    【讨论】:

      【解决方案2】:

      可能有多种原因,但实际上取决于您如何定义架构/需求:

      inMem DB 可以更快地访问数据,您可以使用它来存储临时数据、用户会话信息等内容。

      类似 postgres 的 db 可以用作补充(同样,取决于您想要/需要什么)来存储更多“静态”、最少使用的信息或简单的数据持久性。

      同样,这取决于您可能需要一个、两个或一个都没有的场景。

      希望对你有帮助, 塞尔吉奥

      【讨论】:

      • 真的很有帮助。谢谢,但是我需要问一下-在我发布的有问题的示例中它将如何工作?正如我所看到的,没有像缓存、用户会话等这样的东西——只是普通的 JPA 存储库。那么,为什么会有一个 hsql db?
      • 进行快速搜索.. 看起来像 hsqldb 作为默认值,但在示例中它已更改为 postgres(从 src 看起来它是唯一被使用的)。
      • 我需要编译和测试(现在不能这样做..在工作中)..但是如果您评论该依赖项它应该可以工作(再次..不是 100% 确定它..测试它out)... check: devcenter.heroku.com/articles/… "默认情况下,生成的应用程序设置了 Hypersonic 内存数据库。但是,强烈建议在本地使用与生产中相同的数据库。所以我们将应用程序切换到将 Postgres 与此 Roo 命令一起使用:"
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2015-05-31
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      相关资源
      最近更新 更多