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

卡米尔(Kamil Hulewicz)

我一直在尝试在Spring应用程序和PostgreSQL数据库之间建立连接。数据库和应用程序都在docker容器中启动。关键是执行docker-compose up时,控制台日志指示到localhost:5432的连接已被拒绝。我设法通过python成功连接到数据库,但无法在Java中建立连接,因此为了帮助我添加了用于建立连接的每个文件的内容。我的团队和我将不胜感激,即使是很小的帮助!

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

这是我的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

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>

和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

马里乌斯·施密特(Marius Schmidt)

您可能只是一个简单的计时问题。具有DB在你的搬运工,compose.yaml建立网络可视性dependsOn。但是:当您的Postgres容器准备好接受连接时,Docker Compose不知道。您的应用程序可能只是尝试尽早访问Postgres?看看官方手册,他们实际上是基于Postgres的示例:https : //docs.docker.com/compose/startup-order/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将Java桌面应用程序连接到在线mysql数据库?

来自分类Dev

如何使用JNDI将Java应用程序连接到数据库?

来自分类Dev

尝试将托管的Web应用程序连接到本地数据库?

来自分类Dev

将Java应用程序连接到Ruby on Rails SQLite3数据库

来自分类Dev

应用程序未连接到Mongoose数据库

来自分类Dev

无法使用Sequelize从本地节点应用程序连接到Heroku Postgresql数据库

来自分类Dev

将Android应用程序连接到BlueMix存储的DB2数据库

来自分类Dev

将Java应用程序连接到IBM Bluemix中的SQL数据库

来自分类Dev

在Bluemix Apache-Spark服务上运行的Spark应用程序中连接到PostgreSQL数据库

来自分类Dev

如何将多个应用程序连接到Firestore数据库

来自分类Dev

Dockerized Spring Boot应用程序连接到数据库Docker映像

来自分类Dev

如何将React js应用程序正确连接到MongoDB数据库

来自分类Dev

无法将Azure App Services中的NodeJS应用程序连接到Azure MySQL数据库

来自分类Dev

Heroku上的数据库连接错误:将Web应用程序连接到Postgresql

来自分类Dev

从Spring Boot应用程序连接到本地MySQL数据库时出错

来自分类Dev

将本地运行的springboot应用程序连接到在AWS VM实例上运行的数据库实例

来自分类Dev

Spring应用程序拒绝使用指定的用户名连接到MySql数据库

来自分类Dev

在Kubernetes cron作业中运行的应用程序未连接到同一Kubernetes集群中的数据库

来自分类Dev

如何使用JNDI将Java应用程序连接到数据库?

来自分类Dev

如何使用Php将Android应用程序连接到Amazon RDS MySQL数据库?

来自分类Dev

如何将Clusterpoint数据库连接到Android应用程序

来自分类Dev

在Bluemix Apache-Spark服务上运行的Spark应用程序中连接到PostgreSQL数据库

来自分类Dev

将Android应用程序连接到Heroku数据库

来自分类Dev

如何将 Android 应用程序连接到 AWS 数据库

来自分类Dev

应用程序运行时动态连接到服务器并创建数据库

来自分类Dev

将静态数据库连接到我的 android 应用程序

来自分类Dev

使用 NameCheap 将数据库连接到应用程序

来自分类Dev

如何将运行 Flask 应用程序的 minikube(kubernetes) 节点连接到 mysql docker 容器中的公共数据库?

来自分类Dev

无法将 App Engine 上的 Laravel 应用程序连接到 Cloud SQL 数据库

Related 相关文章

  1. 1

    如何将Java桌面应用程序连接到在线mysql数据库?

  2. 2

    如何使用JNDI将Java应用程序连接到数据库?

  3. 3

    尝试将托管的Web应用程序连接到本地数据库?

  4. 4

    将Java应用程序连接到Ruby on Rails SQLite3数据库

  5. 5

    应用程序未连接到Mongoose数据库

  6. 6

    无法使用Sequelize从本地节点应用程序连接到Heroku Postgresql数据库

  7. 7

    将Android应用程序连接到BlueMix存储的DB2数据库

  8. 8

    将Java应用程序连接到IBM Bluemix中的SQL数据库

  9. 9

    在Bluemix Apache-Spark服务上运行的Spark应用程序中连接到PostgreSQL数据库

  10. 10

    如何将多个应用程序连接到Firestore数据库

  11. 11

    Dockerized Spring Boot应用程序连接到数据库Docker映像

  12. 12

    如何将React js应用程序正确连接到MongoDB数据库

  13. 13

    无法将Azure App Services中的NodeJS应用程序连接到Azure MySQL数据库

  14. 14

    Heroku上的数据库连接错误:将Web应用程序连接到Postgresql

  15. 15

    从Spring Boot应用程序连接到本地MySQL数据库时出错

  16. 16

    将本地运行的springboot应用程序连接到在AWS VM实例上运行的数据库实例

  17. 17

    Spring应用程序拒绝使用指定的用户名连接到MySql数据库

  18. 18

    在Kubernetes cron作业中运行的应用程序未连接到同一Kubernetes集群中的数据库

  19. 19

    如何使用JNDI将Java应用程序连接到数据库?

  20. 20

    如何使用Php将Android应用程序连接到Amazon RDS MySQL数据库?

  21. 21

    如何将Clusterpoint数据库连接到Android应用程序

  22. 22

    在Bluemix Apache-Spark服务上运行的Spark应用程序中连接到PostgreSQL数据库

  23. 23

    将Android应用程序连接到Heroku数据库

  24. 24

    如何将 Android 应用程序连接到 AWS 数据库

  25. 25

    应用程序运行时动态连接到服务器并创建数据库

  26. 26

    将静态数据库连接到我的 android 应用程序

  27. 27

    使用 NameCheap 将数据库连接到应用程序

  28. 28

    如何将运行 Flask 应用程序的 minikube(kubernetes) 节点连接到 mysql docker 容器中的公共数据库?

  29. 29

    无法将 App Engine 上的 Laravel 应用程序连接到 Cloud SQL 数据库

热门标签

归档