Table des matières
Contenu de la question
Solution de contournement
Maison Java Docker Compose + Spring Boot + Postgres

Docker Compose + Spring Boot + Postgres

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

L'éditeur PHP Xigua vous propose aujourd'hui un tutoriel sur la façon d'utiliser Docker Compose pour connecter Spring Boot et Postgres. Docker Compose est un outil permettant de définir et d'exécuter des applications Docker multi-conteneurs, tandis que Spring Boot est un framework pour créer des applications Java et Postgres est une puissante base de données relationnelle. En utilisant ces trois éléments ensemble, nous pouvons facilement créer un environnement de développement comprenant une application Spring Boot et une base de données Postgres. Ce didacticiel vous guidera étape par étape pour apprendre à configurer et connecter les trois, afin que vous puissiez rapidement commencer à développer vos applications.

Contenu de la question

J'ai une application Java Spring Boot qui fonctionne avec une base de données Postgres. Je souhaite utiliser Docker pour les deux. Au départ, je viens de mettre Postgres dans Docker et j'ai défini un fichier docker-compose.yml comme ceci :

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: {}
Copier après la connexion

Ensuite, lorsque j'émets la commande sudo dockerdsudo docker-compose -f docker-compose.yml up 时,它正在启动数据库。例如,我可以使用 pgAdmin 进行连接,使用 localhost 作为服务器和端口 5432。然后,在我的 Spring Boot 应用程序中,在 application.properties, les propriétés suivantes sont définies dans le fichier.

spring.datasource.url=jdbc:postgresql://localhost:5432/sample
spring.datasource.username=sample
spring.datasource.password=sample
spring.jpa.generate-ddl=true
Copier après la connexion

À ce stade, je peux exécuter mon application Spring Boot localement via Spring Suite et tout fonctionne bien. Ensuite, je souhaite également ajouter mon application Spring Boot en tant qu'image Docker. J'ai d'abord créé un Dockerfile dans le répertoire du projet comme indiqué ci-dessous :

FROM java:8
EXPOSE 8080
ADD /target/manager.jar manager.jar
ENTRYPOINT ["java","-jar","manager.jar"]
Copier après la connexion

Ensuite, je suis entré dans le répertoire du projet où mvn clean a été publié, puis mvn install. Ensuite, émettez docker build -f Dockerfile -t manager . suivi de docker tag 9c6b1e3f1d5e myuser/manager:latest (l'identifiant est correct). Finalement, j'ai édité le fichier mvn clean的项目目录,然后是mvn install。接下来,发出 docker build -f Dockerfile -t manager . ,后跟 docker tag 9c6b1e3f1d5e myuser/manager:latest (id 是正确的)。最后,我编辑了现有的 docker-compose.yml existant comme ceci :

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: {}
Copier après la connexion

Cependant, maintenant, si j'émets la commande sudo docker-compose -f docker-compose.yml up, la base de données redémarre correctement, mais j'obtiens une erreur et je sors avec le code 1 de la section de l'application Web. Le problème est la chaîne de connexion. Je crois que je dois le remplacer par autre chose mais je ne sais pas ce que cela devrait être. J'obtiens le message d'erreur suivant :

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
Copier après la connexion

Des idées ?

Solution de contournement

Chaque conteneur possède sa propre interface réseau et son propre hôte local. Alors changez la façon dont Java pointe vers Postgres :

spring.datasource.url=jdbc:postgresql://localhost:5432/sample
Copier après la connexion

À :

spring.datasource.url=jdbc:postgresql://db:5432/sample
Copier après la connexion

db résoudra la bonne adresse IP Postgres.

<小时>

Bonus. Avec docker-compose, vous n'avez pas besoin de créer des images manuellement. Alors changez :

web:
  image: myuser/manager:latest
Copier après la connexion

À :

web:
  build: .
Copier après la connexion

J'ai eu le même problème et il m'a fallu du temps pour le comprendre et le résoudre :

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.
Copier après la connexion

Je montre toutes les propriétés pour que tout le monde puisse comprendre. 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
Copier après la connexion

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:
Copier après la connexion

Pour lancer l'application Spring à l'aide d'une base de données locale, nous utilisons l'url localhost. Afin de nous connecter au conteneur à l'aide d'une base de données, nous devons changer le "localhost" sur le service de base de données, dans mon cas "localhost" en "db". Solution : Ajoutez l'environnement SPRING_DATASOURCE_URL dans docker-compose.yml中添加SPRING_DATASOURCE_URL环境,重写spring.datasource.url et réécrivez la valeur de connexion spring.datasource.url :

environment:
    SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/testdb
Copier après la connexion

J'espère que cela aidera les gens à gagner du temps.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Recommandations de l'émulateur Java : ces cinq recommandations sont faciles à utiliser et pratiques ! Recommandations de l'émulateur Java : ces cinq recommandations sont faciles à utiliser et pratiques ! Feb 22, 2024 pm 08:42 PM

Recommandations de l'émulateur Java : ces cinq recommandations sont faciles à utiliser et pratiques !

Problèmes courants du fichier de configuration log4j et solutions Problèmes courants du fichier de configuration log4j et solutions Feb 19, 2024 pm 08:50 PM

Problèmes courants du fichier de configuration log4j et solutions

Comment installer Java sur Debian 12 : un guide étape par étape Comment installer Java sur Debian 12 : un guide étape par étape Mar 20, 2024 pm 03:40 PM

Comment installer Java sur Debian 12 : un guide étape par étape

Framework de tests unitaires JUnit : avantages et limites de son utilisation Framework de tests unitaires JUnit : avantages et limites de son utilisation Apr 18, 2024 pm 09:18 PM

Framework de tests unitaires JUnit : avantages et limites de son utilisation

Guide d'utilisation de l'API Oracle : exploration de la technologie d'interface de données Guide d'utilisation de l'API Oracle : exploration de la technologie d'interface de données Mar 07, 2024 am 11:12 AM

Guide d'utilisation de l'API Oracle : exploration de la technologie d'interface de données

Optimisation des performances de Java Spring Boot Security : faites voler votre système Optimisation des performances de Java Spring Boot Security : faites voler votre système Feb 19, 2024 pm 05:27 PM

Optimisation des performances de Java Spring Boot Security : faites voler votre système

Tutoriel de base : Créer un projet Maven à l'aide d'IDEA Tutoriel de base : Créer un projet Maven à l'aide d'IDEA Feb 19, 2024 pm 04:43 PM

Tutoriel de base : Créer un projet Maven à l'aide d'IDEA

Connectez Java à la base de données MySQL Connectez Java à la base de données MySQL Feb 22, 2024 pm 12:58 PM

Connectez Java à la base de données MySQL