简体   繁体   English

将 PostgreSQL 数据库连接到 Spring 应用程序(均在 docker 中运行)连接被拒绝

[英]Connecting PostgreSQL database to Spring application (both running in docker) Connection refused

I've been trying to establish connection between my Spring app and PostgreSQL database.我一直在尝试在我的 Spring 应用程序和 PostgreSQL 数据库之间建立连接。 Both the database and app are started in docker containers.数据库和应用程序都在 docker 容器中启动。 The point is that when the docker-compose up is executed, console logs indicate that connection to localhost:5432 has been refused.关键是,当执行 docker-compose up 时,控制台日志显示与 localhost:5432 的连接已被拒绝。 I managed to connected to the database via python successfully but I wasn't able to establish the connection in java, thus to help I added content of every file that was used to establish the connection.我设法通过 python 成功连接到数据库,但我无法在 java 中建立连接,因此帮助我添加了用于建立连接的每个文件的内容。 My team and I would greatly appreciate even minor help!即使是很小的帮助,我和我的团队也将不胜感激!

medical-clinic | org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
medical-clinic |        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:303) ~[postgresql-42.2.18.jar!/:42.2.18]
medical-clinic |        at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51) ~[postgresql-42.2.18.jar!/:42.2.18]
medical-clinic |        at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:225) ~[postgresql-42.2.18.jar!/:42.2.18]
medical-clinic |        at org.postgresql.Driver.makeConnection(Driver.java:465) ~[postgresql-42.2.18.jar!/:42.2.18]
medical-clinic |        at org.postgresql.Driver.connect(Driver.java:264) ~[postgresql-42.2.18.jar!/:42.2.18]
medical-clinic |        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar!/:na]
medical-clinic |        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar!/:na]
medical-clinic |        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar!/:na]
medical-clinic |        at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) ~[HikariCP-3.4.5.jar!/:na]
medical-clinic |        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) ~[HikariCP-3.4.5.jar!/:na]
medical-clinic |        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-3.4.5.jar!/:na]
medical-clinic |        at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.5.jar!/:na]
medical-clinic |        at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:176) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:118) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
medical-clinic |        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.2.9.RELEASE.jar!/:5.2.9.RELEASE]
medical-clinic |        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.2.9.RELEASE.jar!/:5.2.9.RELEASE]
medical-clinic |        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391) ~[spring-orm-5.2.9.RELEASE.jar!/:5.2.9.RELEASE]
medical-clinic |        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
medical-clinic |        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
medical-clinic |        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
medical-clinic |        at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
medical-clinic | Caused by: java.net.ConnectException: Connection refused (Connection refused)
medical-clinic |        at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]
medical-clinic |        at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) ~[na:na]
medical-clinic |        at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) ~[na:na]
medical-clinic |        at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) ~[na:na]
medical-clinic |        at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) ~[na:na]
medical-clinic |        at java.base/java.net.Socket.connect(Socket.java:609) ~[na:na]
medical-clinic |        at org.postgresql.core.PGStream.createSocket(PGStream.java:231) ~[postgresql-42.2.18.jar!/:42.2.18]
medical-clinic |        at org.postgresql.core.PGStream.<init>(PGStream.java:95) ~[postgresql-42.2.18.jar!/:42.2.18]
medical-clinic |        at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:98) ~[postgresql-42.2.18.jar!/:42.2.18]
medical-clinic |        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:213) ~[postgresql-42.2.18.jar!/:42.2.18]
medical-clinic |        ... 34 common frames omitted

Here is my docker-compose.yml file:这是我的 docker-compose.yml 文件:

version: '3'

services:
  db:
    image: 'postgres:13.1-alpine'
    container_name: db
    environment:
      - POSTGRES_DB=MedClinic
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=123
      
      - ALLOW_IP_RANGE-0.0.0.0/0
    volumes:
      - ./src/main/resources/db/init.sql:/docker-entrypoint-initdb.d/1-schema.sql
      - ./src/main/resources/db/data.sql:/docker-entrypoint-initdb.d/2-data.sql
    ports:
      - "5432:5432"
  app:
    image: 'medical-clinic:latest'
    build:
      context: .
    container_name: 'medical-clinic'
    ports:
      - 8080:8080
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/MedClinic
      - SPRING_DATASOURCE_USERNAME=postgres
      - SPRING_DATASOURCE_PASSWORD=123
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update
    depends_on:
      - db

the pom.xml file: pom.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.company</groupId>
    <artifactId>medical-clinic</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>medical-clinic</name>
    <description>Medical clinic app</description>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.18</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

and the application.properties和 application.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/MedClinic
spring.datasource.username=postgres
spring.datasource.password=123
spring.datasource.driver-class-name=org.postgresql.Driver
# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle=true
spring.datasource.validationQuery=SELECT 1
# ===============================
# = JPA / HIBERNATE
# ===============================
# Show or not log for each sql query
spring.jpa.show-sql=true
# Hibernate ddl auto (create, create-drop, update): with "create-drop" the database
# schema will be automatically created afresh for every start of application
spring.jpa.hibernate.ddl-auto=create-drop

# Naming strategy
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

# Allows Hibernate to generate SQL optimized for a particular DBMS
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

you might just have a simple timing problem.你可能只是有一个简单的时间问题。 Having the db dependsOn in your docker-compose.yaml sets up network visibility.在 docker-compose.yaml 中拥有db dependsOn 设置网络可见性。 But: Docker Compose can not know, when your Postgres Container is ready to accept connections.但是: Docker Compose 无法知道您的 Postgres 容器何时准备好接受连接。 Your application might just try to accesss Postgres to early?您的应用程序可能只是尝试尽早访问 Postgres? Have a look into the official manual, they actual base a sample on Postgres: https://docs.docker.com/compose/startup-order/查看官方手册,他们实际上基于 Postgres 的示例: https://docs.docker.com/compose/startup-order/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Spring Boot、PostgreSQL 和 Docker - 在容器中运行时连接被拒绝 - Spring Boot, PostgreSQL, and Docker - Connection Refused whil Running in Container 连接时从 Spring 引导项目到 PostgreSQL 数据库的连接问题 - Connection issue from Spring Boot projects to PostgreSQL database while connecting Postgresql 连接在 docker 容器中被拒绝,但在服务器上成功 - Postgresql Connection Refused in docker container, But Success on server Spring应用程序连接到数据库 - Spring application connecting to Database 弹簧客户端与 docker 和 gradle 的连接被拒绝 - Connection refused on spring-client with docker and gradle Spring boot + docker + rest 模板连接被拒绝 - Spring boot + docker + rest template connection refused Spring App Connection Refused in Docker 组成 - Spring App Connection Refused in Docker Composition spring flyway docker连接到localhost:5432被拒绝 - spring flyway docker connection to localhost:5432 refused Spring + Hibernate + java:运行应用程序后连接到多个数据库 - Spring+Hibernate+java :Connecting to multiple database after running application Spring 使用 Postgres 应用程序启动时无法在 Docker 上运行。错误:PSQLException:拒绝连接到 127.0.0.1:5432。 - Spring Boot with Postgres application not working on Docker. Error: PSQLException: Connection to 127.0.0.1:5432 refused.
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM