首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么spring应用程序不能连接Postgres db?

为什么spring应用程序不能连接Postgres db?
EN

Stack Overflow用户
提问于 2022-01-29 20:18:10
回答 2查看 285关注 0票数 0

我想用Postgres构建我的春季引导应用程序,在一个带有docker的坞容器中。我在构建码头组合容器时出错了。spring应用程序无法连接到Postgres db。Postgres容器按其应有的方式运行,我可以创建一个与通常为db-客户机(dbeaver)的连接。

以下是我的配置文件:

1. application.yml

代码语言:javascript
复制
server:
  port: 8081
  error:
    include-message: always
    include-binding-errors: always
spring:
  datasource:
    password: password
    url: jdbc:postgresql://postgres:5432/trainingdb
    username: user
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQLDialect
        format_sql: true
    show-sql: true

2. Dockerfile

代码语言:javascript
复制
FROM openjdk:11
ADD target/training-service-1.0.0.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

3. docker-compose.yml

代码语言:javascript
复制
version: '1'
services:
  app:
    container_name: springboot
    image: springboot
    build: ./
    depends_on:
      - postgres
    ports:
      - "8081:8081"
  postgres:
    image: postgres:latest
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=trainingdb

我首先运行./mvnw clean package -DskipTests

来构建jar文件,然后运行docker compose up

日志消息的小片段:

代码语言:javascript
复制
springboot                   |  at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot                   |  at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:225) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot                   |  at org.postgresql.Driver.makeConnection(Driver.java:465) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot                   |  at org.postgresql.Driver.connect(Driver.java:264) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot                   |  at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar!/:na]
springboot                   |  at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar!/:na]
springboot                   |  at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar!/:na]
springboot                   |  at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar!/:na]
springboot                   |  at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar!/:na]
springboot                   |  at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar!/:na]
springboot                   |  at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar!/:na]
springboot                   |  at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.32.Final.jar!/:5.4.32.Final]
springboot                   |  at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.32.Final.jar!/:5.4.32.Final]
springboot                   |  at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:43) ~[hibernate-core-5.4.32.Final.jar!/:5.4.32.Final]
springboot                   |  ... 44 common frames omitted
springboot                   | Caused by: java.net.UnknownHostException: postgresql
springboot                   |  at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:220) ~[na:na]
springboot                   |  at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:na]
springboot                   |  at java.base/java.net.Socket.connect(Socket.java:609) ~[na:na]
springboot                   |  at org.postgresql.core.PGStream.createSocket(PGStream.java:231) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot                   |  at org.postgresql.core.PGStream.<init>(PGStream.java:95) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot                   |  at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:98) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot                   |  at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:213) ~[postgresql-42.2.24.jar!/:42.2.24]
springboot                   |  ... 58 common frames omitted
springboot                   | 
springboot exited with code 1

来自我的postgres容器的日志消息:

代码语言:javascript
复制
PostgreSQL Database directory appears to contain a database; Skipping initialization


2022-01-30 07:39:04.321 UTC [1] LOG:  starting PostgreSQL 14.1 (Debian 14.1-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit

2022-01-30 07:39:04.321 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432

2022-01-30 07:39:04.321 UTC [1] LOG:  listening on IPv6 address "::", port 5432

2022-01-30 07:39:04.327 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

2022-01-30 07:39:04.338 UTC [27] LOG:  database system was shut down at 2022-01-30 07:38:38 UTC

2022-01-30 07:39:04.349 UTC [1] LOG:  database system is ready to accept connections

2022-01-30 07:42:16.689 UTC [45] LOG:  invalid length of startup packet

2022-01-30 07:42:16.709 UTC [46] LOG:  invalid length of startup packet

2022-01-30 07:42:16.726 UTC [47] LOG:  invalid length of startup packet

2022-01-30 07:42:39.376 UTC [1] LOG:  received fast shutdown request

2022-01-30 07:42:39.379 UTC [1] LOG:  aborting any active transactions

2022-01-30 07:42:39.381 UTC [1] LOG:  background worker "logical replication launcher" (PID 33) exited with exit code 1

2022-01-30 07:42:39.386 UTC [28] LOG:  shutting down

2022-01-30 07:42:39.430 UTC [1] LOG:  database system is shut down

2022-01-30 07:45:33.835 UTC [1] LOG:  starting PostgreSQL 14.1 (Debian 14.1-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit

2022-01-30 07:45:33.835 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432

2022-01-30 07:45:33.836 UTC [1] LOG:  listening on IPv6 address "::", port 5432

2022-01-30 07:45:33.841 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

2022-01-30 07:45:33.852 UTC [26] LOG:  database system was shut down at 2022-01-30 07:42:39 UTC

2022-01-30 07:45:33.861 UTC [1] LOG:  database system is ready to accept connections

2022-01-30 07:48:44.550 UTC [1] LOG:  received fast shutdown request

2022-01-30 07:48:44.559 UTC [1] LOG:  aborting any active transactions

2022-01-30 07:48:44.564 UTC [1] LOG:  background worker "logical replication launcher" (PID 32) exited with exit code 1

2022-01-30 07:48:44.572 UTC [27] LOG:  shutting down

2022-01-30 07:48:44.630 UTC [1] LOG:  database system is shut down

2022-01-30 07:49:05.986 UTC [1] LOG:  starting PostgreSQL 14.1 (Debian 14.1-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit

2022-01-30 07:49:05.986 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432

2022-01-30 07:49:05.988 UTC [1] LOG:  listening on IPv6 address "::", port 5432

2022-01-30 07:49:05.995 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

2022-01-30 07:49:06.004 UTC [26] LOG:  database system was shut down at 2022-01-30 07:48:44 UTC

2022-01-30 07:49:06.035 UTC [1] LOG:  database system is ready to accept connections


PostgreSQL Database directory appears to contain a database; Skipping initialization



PostgreSQL Database directory appears to contain a database; Skipping initialization

``

 command to start up the containers. Is there any error in my spring boot configuration ?
EN

回答 2

Stack Overflow用户

发布于 2022-01-29 21:51:30

我认为问题在于jdbc:jdbc:postgresql://postgres:5432/trainingdb

你能试一下这个网址吗:jdbc:postgresql://localhost:5432/trainingdb

票数 1
EN

Stack Overflow用户

发布于 2022-01-30 00:34:15

您能否检查日志,postgre容器是否已启动并正在运行?

另外,请使用命令“docker”检查容器状态,并检查容器名称“postgres”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70909376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档