Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
Postgresql 固定式弹簧靴+;Postgres连接被拒绝_Postgresql_Spring Boot_Docker_Docker Compose_Database Connection - Fatal编程技术网

Postgresql 固定式弹簧靴+;Postgres连接被拒绝

Postgresql 固定式弹簧靴+;Postgres连接被拒绝,postgresql,spring-boot,docker,docker-compose,database-connection,Postgresql,Spring Boot,Docker,Docker Compose,Database Connection,尝试启动一个Spring引导应用程序,该应用程序使用docker compose连接到两个PostgreSQL数据库,但当Spring尝试连接到其中任何一个数据库时,我发现连接被拒绝 我的配置如下: docker compose.yml version: '3.2' services: mydb-1: container_name: mydb-1 image: mydb-1 ports: - '5432:5432' environment:

尝试启动一个Spring引导应用程序,该应用程序使用docker compose连接到两个PostgreSQL数据库,但当Spring尝试连接到其中任何一个数据库时,我发现连接被拒绝

我的配置如下:

docker compose.yml

version: '3.2'
services:
  mydb-1:
    container_name: mydb-1
    image: mydb-1
    ports:
      - '5432:5432'
    environment:
         - POSTGRES_PASSWORD=postgres
         - POSTGRES_USER=postgres
         - POSTGRES_DB=testdb1
  mydb-2:
    container_name: mydb-2
    image: mydb-2
    ports:
      - '5433:5432'
    environment:
          - POSTGRES_PASSWORD=postgres
          - POSTGRES_USER=postgres
          - POSTGRES_DB=testdb2
  my-server:
    image: my-server-spring
    restart: on-failure
    depends_on:
      - mydb-1
      - mydb-2
    environment:
      - SPRING_DB1-DATASOURCE_JDBC-URL=jdbc:postgresql://mydb-1:5432/testdb1
      - SPRING_DB2-DATASOURCE_JDBC-URL=jdbc:postgresql://mydb-2:5433/testdb2
    expose:
      - '8080'
    ports:
      - '8080:8080'
Spring应用程序属性

spring.db1-datasource.jdbc-url= jdbc:postgresql://localhost:5432/testdb1
spring.db1-datasource.username= postgres
spring.db1-datasource.password= postgres
spring.db1-datasource.driverClassName= org.postgresql.Driver

spring.db2-datasource.jdbc-url= jdbc:postgresql://localhost:5433/testdb2
spring.db2-datasource.username= postgres
spring.db2-datasource.password= postgres
spring.db2-datasource.driverClassName= org.postgresql.Driver

堆栈跟踪(部分)

org.postgresql.util.psqleexception:到testdb2:5433的连接被拒绝。检查主机名和端口是否正确,邮政局长是否接受TCP/IP连接。
advidi-server|1 |位于org.postgresql.core.v3.connectionfactorympl.openConnectionImpl(connectionfactorympl.java:285)~[postgresql-42.2.14.jar!/:42.2.14]
advidi-server|1 |位于org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)~[postgresql-42.2.14.jar!/:42.2.14]
advidi-server|1 |位于org.postgresql.jdbc.PgConnection.(PgConnection.java:217)~[postgresql-42.2.14.jar!/:42.2.14]
advidi-server|1 |位于org.postgresql.Driver.makeConnection(Driver.java:458)~[postgresql-42.2.14.jar!/:42.2.14]
advidi-server|1 |位于org.postgresql.Driver.connect(Driver.java:260)~[postgresql-42.2.14.jar!/:42.2.14]
advidi-server|1 |位于com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)~[HikariCP-3.4.5.jar!/:na]
advidi-server|u 1 |位于com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358)~[HikariCP-3.4.5.jar!/:na]
advidi-server|1 |位于com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206)~[HikariCP-3.4.5.jar!/:na]
advidi-server|u 1 |位于com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477)~[HikariCP-3.4.5.jar!/:na]
advidi-server|u 1 |位于com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560)~[HikariCP-3.4.5.jar!/:na]
advidi-server|1 |位于com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115)~[HikariCP-3.4.5.jar!/:na]
advidi-server|1 |位于com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)~[HikariCP-3.4.5.jar!/:na]
advidi-server|1位于org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)~[hibernate-core-5.4.18.Final.jar!/:5.4.18.Final]
advidi-server|1 |位于org.hibernate.engine.jdbc.env.internal.jdbconvironmentinitiator$connectionProviderjdbconnectionaccess.获得连接(jdbconvironmentinitiator.java:180)~[hibernate-core-5.4.18.Final.jar!/:5.4.18.Final]
起初,我认为问题在于Spring应用程序试图在dbs引导完成之前连接到dbs,但情况似乎并非如此,因为使用
restart:on failure
时,它应该在某个时候设法连接

默认的
localhost
值也不应该是问题,因为它们被docker compose文件中的环境变量替换


有什么想法吗?

您没有显示
mydb-1
mydb-2
图像配置,所以我实际上是在猜测

  • 无需将端口映射到主机。删除
    端口:
    条目
  • spring容器应使用端口5432连接到两个DB容器。每个DB容器都有自己的IP,因此没有问题。不要连接到
    localhost
    ,因为那是容器本身
  • 无需在连接字符串中指定
    :5432
    ,因为这是默认值
  • 似乎您在
    应用程序.属性和服务器配置中的
    环境:
    项中都有连接设置。应用程序使用的是哪个?无论如何,您的连接字符串应该以
    mydb-1/testdb1
    mydb-2/testdb2
    结尾-没有比这更复杂的了

  • 您没有显示
    mydb-1
    mydb-2
    图像配置,因此我实际上是在猜测

  • 无需将端口映射到主机。删除
    端口:
    条目
  • spring容器应使用端口5432连接到两个DB容器。每个DB容器都有自己的IP,因此没有问题。不要连接到
    localhost
    ,因为那是容器本身
  • 无需在连接字符串中指定
    :5432
    ,因为这是默认值
  • 似乎您在
    应用程序.属性和服务器配置中的
    环境:
    项中都有连接设置。应用程序使用的是哪个?无论如何,您的连接字符串应该以
    mydb-1/testdb1
    mydb-2/testdb2
    结尾-没有比这更复杂的了

  • 您正在环境中传递
    SPRING\u DB1-DATASOURCE\u JDBC-URL
    ,而没有在application.properties中使用它。因此,变量不是重写的

    您需要在application.properties中使用类似
    spring.db1 datasource.jdbc url=$spring\u db1-datasource\u jdbc-url


    在环境中设置应用程序中变量的确切名称。属性
    -spring.db1 datasource.jdbc url=jdbc:postgresql://mydb-1:5432/testdb1


    我建议使用第二个选项,它仍然允许您使用application.properties作为本地运行的默认值。

    您正在环境中传递
    SPRING\u DB1-DATASOURCE\u JDBC-URL
    ,而不是在application.properties中使用它。因此,变量不是重写的

    您需要在application.properties中使用类似
    spring.db1 datasource.jdbc url=$spring\u db1-datasource\u jdbc-url


    在环境中设置应用程序中变量的确切名称
    org.postgresql.util.PSQLException: Connection to testdb2:5433 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
    
    advidi-server_1         |       at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:285) ~[postgresql-42.2.14.jar!/:42.2.14]
    advidi-server_1         |       at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) ~[postgresql-42.2.14.jar!/:42.2.14]
    advidi-server_1         |       at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:217) ~[postgresql-42.2.14.jar!/:42.2.14]
    advidi-server_1         |       at org.postgresql.Driver.makeConnection(Driver.java:458) ~[postgresql-42.2.14.jar!/:42.2.14]
    advidi-server_1         |       at org.postgresql.Driver.connect(Driver.java:260) ~[postgresql-42.2.14.jar!/:42.2.14]
    advidi-server_1         |       at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar!/:na]
    advidi-server_1         |       at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar!/:na]
    advidi-server_1         |       at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar!/:na]
    advidi-server_1         |       at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar!/:na]
    advidi-server_1         |       at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[HikariCP-3.4.5.jar!/:na]
    advidi-server_1         |       at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-3.4.5.jar!/:na]
    advidi-server_1         |       at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.5.jar!/:na]
    advidi-server_1         |       at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.18.Final.jar!/:5.4.18.Final]
    advidi-server_1         |       at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.18.Final.jar!/:5.4.18.Final]