Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从两个不同的spring boot应用程序访问相同的DB_Java_Spring_Spring Boot_Netflix Eureka_In Memory Database - Fatal编程技术网

Java 如何从两个不同的spring boot应用程序访问相同的DB

Java 如何从两个不同的spring boot应用程序访问相同的DB,java,spring,spring-boot,netflix-eureka,in-memory-database,Java,Spring,Spring Boot,Netflix Eureka,In Memory Database,我有两个spring microservice应用程序,希望它们访问相同的数据库。但当我运行这两个应用程序时,它们会创建不同的数据库。Application.yml文件: 服务1: server.port: 8002 logging: level: org: springframework: jdbc: core: DEBUG spring: application: name: movie

我有两个spring microservice应用程序,希望它们访问相同的数据库。但当我运行这两个应用程序时,它们会创建不同的数据库。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,一个服务将创建DB,另一个将只使用它。

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

更新:

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

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

另外,让不同的微服务访问同一个数据库是一种常见的反模式


如果数据库是共享的,那么它应该只由一个微服务组件的实例共享。

在我的例子中,只有一个用户是可以的。在每个服务中,我都创建了一个表,其中有一个foreignKey连接这些表。我只想让他们在同一个数据库中创建表。不,从架构的角度来看,你正在破坏微服务的独立性。您的应用程序在这个级别(play项目)可能还可以,但它会导致一个宏服务体系结构和部署整体。您将发现自己选择了不属于自己的表,从而通过数据库模式在服务之间建立了高度耦合。因此,您将无法独立更新服务和数据模型。非常感谢。这完全有道理。我相应地改变了我的架构。不建议在微服务之间共享数据库。见此帖: