Inhaltsverzeichnis
Frageninhalt
Workaround
Heim Java Docker Compose + Spring Boot + Postgres-Funktion

Docker Compose + Spring Boot + Postgres-Funktion

Feb 11, 2024 pm 03:39 PM
java应用程序

PHP-Editor Xigua präsentiert Ihnen heute ein Tutorial, wie Sie Docker Compose verwenden, um Spring Boot und Postgres zu verbinden. Docker Compose ist ein Tool zum Definieren und Ausführen von Docker-Anwendungen mit mehreren Containern, während Spring Boot ein Framework zum Erstellen von Java-Anwendungen ist und Postgres eine leistungsstarke relationale Datenbank ist. Durch die Kombination dieser drei können wir problemlos eine Entwicklungsumgebung erstellen, die eine Spring Boot-Anwendung und eine Postgres-Datenbank umfasst. In diesem Tutorial lernen Sie Schritt für Schritt, wie Sie alle drei konfigurieren und verbinden, damit Sie schnell mit der Entwicklung Ihrer Anwendungen beginnen können.

Frageninhalt

Ich habe eine Java Spring Boot-Anwendung, die mit einer Postgres-Datenbank funktioniert. Ich möchte Docker für beide verwenden. Ich habe Postgres zunächst einfach in Docker eingefügt und eine docker-compose.yml-Datei wie folgt definiert:

version: '2'
services:
    db:
        container_name: sample_db
        image: postgres:9.5
        volumes:
            - sample_db:/var/lib/postgresql/data
        environment:
            - POSTGRES_PASSWORD=sample
            - POSTGRES_USER=sample
            - POSTGRES_DB=sample
            - PGDATA=/var/lib/postgresql/data/pgdata
        ports:
            - 5432:5432

volumes:
    sample_db: {}
Nach dem Login kopieren

Wenn ich dann den Befehl gebe sudo dockerdsudo docker-compose -f docker-compose.yml up 时,它正在启动数据库。例如,我可以使用 pgAdmin 进行连接,使用 localhost 作为服务器和端口 5432。然后,在我的 Spring Boot 应用程序中,在 application.properties, werden die folgenden Eigenschaften in der Datei definiert.

spring.datasource.url=jdbc:postgresql://localhost:5432/sample
spring.datasource.username=sample
spring.datasource.password=sample
spring.jpa.generate-ddl=true
Nach dem Login kopieren

Jetzt kann ich meine Spring Boot-Anwendung lokal über Spring Suite ausführen und alles funktioniert einwandfrei. Dann möchte ich auch meine Spring Boot-Anwendung als Docker-Image hinzufügen. Ich habe zunächst eine Docker-Datei im Projektverzeichnis erstellt, wie unten gezeigt:

FROM java:8
EXPOSE 8080
ADD /target/manager.jar manager.jar
ENTRYPOINT ["java","-jar","manager.jar"]
Nach dem Login kopieren

Dann habe ich das Projektverzeichnis eingegeben, in dem mvn clean veröffentlicht wurde, und dann mvn install. Geben Sie als Nächstes docker build -f Dockerfile -t manager . ein, gefolgt von docker tag 9c6b1e3f1d5e myuser/manager:latest (die ID ist korrekt). Abschließend habe ich die vorhandene mvn clean的项目目录,然后是mvn install。接下来,发出 docker build -f Dockerfile -t manager . ,后跟 docker tag 9c6b1e3f1d5e myuser/manager:latest (id 是正确的)。最后,我编辑了现有的 docker-compose.yml-Datei wie folgt bearbeitet:

version: '2'
services:
    web:
      image: myuser/manager:latest
      ports: 
          - 8080:8080
      depends_on:
          - db
    db:
        container_name: sample_db
        image: postgres:9.5
        volumes:
            - sample_db:/var/lib/postgresql/data
        environment:
            - POSTGRES_PASSWORD=sample
            - POSTGRES_USER=sample
            - POSTGRES_DB=sample
            - PGDATA=/var/lib/postgresql/data/pgdata
        ports:
            - 5432:5432

volumes:
    sample_db: {}
Nach dem Login kopieren

Wenn ich jetzt jedoch den Befehl sudo docker-compose -f docker-compose.yml up gebe, startet die Datenbank wieder korrekt, aber ich erhalte eine Fehlermeldung und beende den Vorgang mit Code 1 des Webanwendungsabschnitts. Das Problem ist die Verbindungszeichenfolge. Ich glaube, ich muss es in etwas anderes ändern, aber ich weiß nicht, was es sein soll. Ich erhalte folgende Fehlermeldung:

web_1  | 2017-06-27 22:11:54.418 ERROR 1 --- [           main] o.a.tomcat.jdbc.pool.ConnectionPool      : Unable to create initial connections of pool.
web_1  | 
web_1  | 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
Nach dem Login kopieren

Irgendwelche Ideen?

Workaround

Jeder Container verfügt über eine eigene Netzwerkschnittstelle und einen eigenen lokalen Host. Ändern Sie also die Art und Weise, wie Java auf Postgres verweist:

spring.datasource.url=jdbc:postgresql://localhost:5432/sample
Nach dem Login kopieren

An:

spring.datasource.url=jdbc:postgresql://db:5432/sample
Nach dem Login kopieren

db wird zur richtigen Postgres-IP aufgelöst.

<小时>

Bonus. Mit Docker-Compose müssen Sie Images nicht manuell erstellen. Also ändern:

web:
  image: myuser/manager:latest
Nach dem Login kopieren

An:

web:
  build: .
Nach dem Login kopieren

Ich hatte das gleiche Problem und es hat einige Zeit gedauert, bis ich es verstanden und gelöst habe :

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.
Nach dem Login kopieren

Ich zeige alle Eigenschaften, damit jeder sie verstehen kann. application.properties:

spring.datasource.url=jdbc:postgresql://localhost:5432/testdb
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL82Dialect
spring.jpa.hibernate.ddl-auto=update
Nach dem Login kopieren

docker-compose.yml:

version: "3"
  services:
    springapp:
      build: .
      container_name: springapp
      environment:
        SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/testdb
      ports:
        - 8000:8080
      restart: always
      depends_on:
        - db
    db:
      image: postgres
      container_name: db
      environment:
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=postgres
        - POSTGRES_DB=testdb
        - PGDATA=/var/lib/postgresql/data/pgdata
      ports:
        - 5000:5432
      volumes:
        - pgdata:/var/lib/postgresql/data
      restart: always
  volumes:
    pgdata:
Nach dem Login kopieren

Um die Spring-Anwendung mithilfe einer lokalen Datenbank zu starten, verwenden wir die URL localhost. Um über eine Datenbank eine Verbindung zum Container herzustellen, müssen wir den „localhost“ im Datenbankdienst ändern, in meinem Fall „localhost“ in „db“. Lösung: Fügen Sie die Umgebung SPRING_DATASOURCE_URL in docker-compose.yml中添加SPRING_DATASOURCE_URL环境,重写spring.datasource.url hinzu und schreiben Sie den Verbindungswert spring.datasource.url neu:

environment:
    SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/testdb
Nach dem Login kopieren

Ich hoffe, das hilft den Leuten, Zeit zu sparen.

Das obige ist der detaillierte Inhalt vonDocker Compose + Spring Boot + Postgres-Funktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Empfehlungen für Java-Emulator: Diese fünf sind einfach zu verwenden und praktisch! Empfehlungen für Java-Emulator: Diese fünf sind einfach zu verwenden und praktisch! Feb 22, 2024 pm 08:42 PM

Ein Java-Emulator ist eine Software, die Java-Anwendungen auf einem Computer oder Gerät ausführen kann. Es kann die virtuelle Java-Maschine simulieren und Java-Bytecode ausführen, sodass Benutzer Java-Programme auf verschiedenen Plattformen ausführen können. Java-Simulatoren werden häufig in der Softwareentwicklung, beim Lernen und Testen eingesetzt. In diesem Artikel werden fünf nützliche und praktische Java-Emulatoren vorgestellt, die den Anforderungen verschiedener Benutzer gerecht werden und Benutzern dabei helfen, Java-Programme effizienter zu entwickeln und auszuführen. Der erste Emulator war Eclipse. Ekl

Häufige Probleme und Lösungen mit der Log4j-Konfigurationsdatei Häufige Probleme und Lösungen mit der Log4j-Konfigurationsdatei Feb 19, 2024 pm 08:50 PM

Häufige Probleme und Lösungen für log4j-Konfigurationsdateien Im Entwicklungsprozess von Java-Anwendungen ist die Protokollierung eine sehr wichtige Funktion. Und log4j ist ein weit verbreitetes Protokollierungsframework in Java. Es definiert den Ausgabemodus von Protokollen über Konfigurationsdateien und ist sehr praktisch, um die Ebene und den Ausgabeort von Protokollen zu steuern. Bei der Konfiguration von log4j treten jedoch manchmal Probleme auf. In diesem Artikel werden einige häufige Probleme und deren Lösungen vorgestellt und spezifische Codebeispiele angehängt. Problem 1: Die Protokolldatei generiert keine Lösung:

So installieren Sie Java unter Debian 12: Eine Schritt-für-Schritt-Anleitung So installieren Sie Java unter Debian 12: Eine Schritt-für-Schritt-Anleitung Mar 20, 2024 pm 03:40 PM

Java ist eine leistungsstarke Programmiersprache, mit der Benutzer eine breite Palette von Anwendungen erstellen können, z. B. das Erstellen von Spielen, das Erstellen von Webanwendungen und das Entwerfen eingebetteter Systeme. Debian12 ist ein leistungsstarkes, neu veröffentlichtes Linux-basiertes Betriebssystem, das eine stabile und zuverlässige Grundlage für das Gedeihen von Java-Anwendungen bietet. Zusammen mit Java- und Debian-Systemen können Sie eine Welt voller Möglichkeiten und Innovationen eröffnen, die den Menschen sicherlich sehr helfen können. Dies ist nur möglich, wenn Java auf Ihrem Debian-System installiert ist. In dieser Anleitung erfahren Sie: So installieren Sie Java auf Debian12. So installieren Sie Java auf Debian12. So entfernen Sie Java aus Debian12

JUnit-Unit-Test-Framework: Vorteile und Einschränkungen seiner Verwendung JUnit-Unit-Test-Framework: Vorteile und Einschränkungen seiner Verwendung Apr 18, 2024 pm 09:18 PM

Das Unit-Testing-Framework JUnit ist ein weit verbreitetes Tool, dessen Hauptvorteile automatisiertes Testen, schnelles Feedback, verbesserte Codequalität und Portabilität sind. Es weist jedoch auch Einschränkungen auf, darunter begrenzter Umfang, Wartungskosten, Abhängigkeiten, Speicherverbrauch und fehlende Unterstützung für kontinuierliche Integration. Für Unit-Tests von Java-Anwendungen ist JUnit ein leistungsstarkes Framework, das viele Vorteile bietet, bei der Verwendung müssen jedoch seine Einschränkungen berücksichtigt werden.

Oracle API-Nutzungshandbuch: Erkundung der Datenschnittstellentechnologie Oracle API-Nutzungshandbuch: Erkundung der Datenschnittstellentechnologie Mar 07, 2024 am 11:12 AM

Oracle ist ein weltbekannter Anbieter von Datenbankmanagementsystemen und seine API (Application Programming Interface) ist ein leistungsstarkes Tool, das Entwicklern hilft, einfach mit Oracle-Datenbanken zu interagieren und diese zu integrieren. In diesem Artikel befassen wir uns mit dem Oracle API-Nutzungsleitfaden, zeigen den Lesern, wie sie die Datenschnittstellentechnologie während des Entwicklungsprozesses nutzen können, und stellen spezifische Codebeispiele bereit. 1.Orakel

Grundlegendes Tutorial: Erstellen Sie ein Maven-Projekt mit IDEA Grundlegendes Tutorial: Erstellen Sie ein Maven-Projekt mit IDEA Feb 19, 2024 pm 04:43 PM

IDEA (IntelliJIDEA) ist eine leistungsstarke integrierte Entwicklungsumgebung, die Entwicklern dabei helfen kann, verschiedene Java-Anwendungen schnell und effizient zu entwickeln. Bei der Java-Projektentwicklung kann uns die Verwendung von Maven als Projektmanagement-Tool dabei helfen, abhängige Bibliotheken besser zu verwalten, Projekte zu erstellen usw. In diesem Artikel werden die grundlegenden Schritte zum Erstellen eines Maven-Projekts in IDEA detailliert beschrieben und spezifische Codebeispiele bereitgestellt. Schritt 1: Öffnen Sie IDEA und erstellen Sie ein neues Projekt. Öffnen Sie IntelliJIDEA

Verbinden Sie Java mit der MySQL-Datenbank Verbinden Sie Java mit der MySQL-Datenbank Feb 22, 2024 pm 12:58 PM

Wie verbinde ich mich mit Java mit der MySQL-Datenbank? Wenn ich es versuche, erhalte ich java.sql.sqlexception:nosuitabledriverfoundforjdbc:mysql://database/tableatjava.sql.drivermanager.getconnection(drivermanager.java:689)atjava.sql.drivermanager.getconnection(drivermanager.java:247) oder

Erste Schritte mit JMX: Entdecken Sie die Grundlagen der Java-Überwachung und -Verwaltung Erste Schritte mit JMX: Entdecken Sie die Grundlagen der Java-Überwachung und -Verwaltung Feb 20, 2024 pm 09:06 PM

Was ist JMX? JMX (Java Monitoring and Management) ist ein Standard-Framework, mit dem Sie Java-Anwendungen und deren Ressourcen überwachen und verwalten können. Es bietet eine einheitliche API für den Zugriff auf und die Bearbeitung der Metadaten und Leistungseigenschaften einer Anwendung. MBean: Management BeanMBean (Management Bean) ist das Kernkonzept in JMX. Es kapselt einen Teil der Anwendung, der überwacht und verwaltet werden kann. MBeans verfügen über Eigenschaften (lesbar oder beschreibbar) und Operationen (Methoden), die verwendet werden, um auf den Status der Anwendung zuzugreifen und Operationen auszuführen. MXBean: Verwaltungserweiterung BeanMXBean ist eine Erweiterung von MBean, die erweiterte Überwachungs- und Verwaltungsfunktionen bietet. MXBeans werden durch die JMX-Spezifikation definiert und sind vordefiniert