【问题标题】:How to access the same DB from 2 different spring boot applications如何从 2 个不同的 Spring Boot 应用程序访问相同的数据库
【发布时间】:2020-11-01 07:13:04
【问题描述】:

我有 2 个 spring 微服务应用程序并希望它们访问同一个数据库。但是当我运行它们时,这两个应用程序都会创建不同的数据库。 Application.yml 文件:

服务 1:

server.port: 8002

logging:
  level:
    org:
      springframework:
        jdbc:
          core:
            DEBUG

spring:
  application:
    name: movie
  datasource:
    url: jdbc:h2:mem:movie_service
    driver-class-name: org.h2.Driver
  h2:
    console:
      enabled: true

eureka:
  client:
    serviceUrl:
      defaultZone: ${EUREKA_URI:http://localhost:8001/eureka}
    registryFetchIntervalSeconds: 1
  instance:
    leaseRenewalIntervalInSeconds: 1
    #preferIpAddress: true
eureka.instance.prefer-ip-address: false

服务 2:

server.port: 8003

spring:
  application.name: client
  datasource:
    url: jdbc:h2:mem:movie_service
    driver-class-name: org.h2.Driver
  h2:
    console:
      enabled: true

logging:
  level:
    org:
      springframework:
        jdbc:
          core:
            DEBUG

eureka:
  client:
    serviceUrl:
      defaultZone: ${EUREKA_URI:http://localhost:8001/eureka}
    registryFetchIntervalSeconds: 1
  instance:
    leaseRenewalIntervalInSeconds: 1
    #preferIpAddress: true
eureka.instance.prefer-ip-address: false

我认为通过提供相同的 URL,一个服务将创建数据库,而另一个将只使用它。

【问题讨论】:

标签: java spring spring-boot netflix-eureka in-memory-database


【解决方案1】:

H2 是一个内存数据库,使用一个允许多个用户的数据库。

更新:

实际上,我并不精确。 H2 具有服务器模式,但您正在运行应用程序中嵌入的数据库。

您需要将数据库作为服务,然后您可以从微服务应用程序连接到正在运行的数据库。

顺便说一句,让不同的微服务访问同一个数据库是一种常见的反模式。

数据库——如果它是共享的——应该只被一个微服务组件的实例共享。

【讨论】:

  • 就我而言,拥有一个用户是可以的。在每个服务中,我创建一个表,其中包含连接这些表的外键。我只是希望他们在同一个数据库中创建表。
  • 不,从架构的角度来看,您正在破坏微服务的独立性。您的应用程序在这个级别(播放项目)可能没问题,但它会导致拥有宏观服务架构和部署单体。您会发现自己选择了您不拥有的表,从而通过数据库模式在您的服务之间建立了高度耦合。因此,您将无法独立更新服务和数据模型。
  • 非常感谢。这完全有道理。我相应地改变了我的架构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多