Construction de l'environnement de développement Java Spring Boot + Docker

Aperçu

Créez un environnement de développement Java avec Spring Boot avec Docker. Utilisez Java 11 et gradle.

Jusqu'au point où Hello World! Est affiché. (Mise à jour: méthode de débogage à distance ajoutée)

Produit fini

https://github.com/tomoyuki-mikami/spring-boot-docker

Méthode d'exécution

$ cd docker
$ docker-compose up -d

environnement

MacOS Catalina 10.15.2 Docker for Mac 2.1.0.5 IntelliJ IDEA Ultimate 2019.3.1 OpenJDK 11 (installé avec homebrew)

Procédure locale

Créer un projet

Sans IntelliJ

https://start.spring.io/ Si vous faites la même sélection ici et Générer, il sera téléchargé sous forme de zip, alors utilisez-le.

Si vous avez IntelliJ
  1. Créer un nouveau projet avec IntelliJ スクリーンショット 2019-12-29 10.44.27.png
  2. Spécification Java 11, Spring Initializer est par défaut スクリーンショット 2019-12-29 10.45.33.png
  3. Sélectionnez Gradle Config, Java, Jar, 11. Autre que ça スクリーンショット 2019-12-29 10.45.57.png
  4. Les dépendances ont sélectionné les éléments suivants, mais ce n'est pas nécessaire si vous souhaitez simplement afficher Hello World Plus tard, j'ai mis diverses choses pour me connecter à MySQL, créer une fonction de connexion et créer une vue. Au contraire, le simple fait d'afficher Hello World en premier ne démarre pas, alors je l'ai commenté dans build.gradle. スクリーンショット 2019-12-29 10.46.42.png
  5. Spécifiez le nom et l'emplacement du projet pour créer le projet スクリーンショット 2019-12-29 10.47.05.png
    Maintenant, lorsque vous appuyez sur FINISH, le projet sera créé automatiquement et gradle sera exécuté la première fois. Si vous utilisez un IntelliJ récent, le répertoire sous src n'est pas créé automatiquement, alors créez-le manuellement.

Créer Hello World

Modifiez Application.java sous src / main / java / com.mika.app

Application.java


package com.mika.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class Application {

    @RequestMapping("/")
    String Index() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

Essayez de l'exécuter sur IntelliJ à ce stade → Échoue probablement. Appuyez sur le bouton d'exécution à côté de la classe publique Application {. スクリーンショット 2019-12-29 11.07.05.png

J'ai besoin de commenter car je mets trop de choses dans les dépendances et cela fonctionne en vain.

Commentez une partie de build.gradle

build.gradle


dependencies {
//    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
//    implementation 'org.springframework.boot:spring-boot-starter-security'
//    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
//    runtimeOnly 'mysql:mysql-connector-java'
//    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'
    testImplementation 'org.springframework.security:spring-security-test'
}

Maintenant, recommencez Affichez http: // localhost: 8080 et confirmez que Hello World est affiché. Après confirmation, arrêtez avec le bouton d'arrêt.

Créer Dockerfile, docker-compose.yml

Créez un répertoire docker et créez Dockerfile et docker-compose.yml en dessous La raison d'utiliser docker-compose est que nous prévoyons de construire MySQL et nginx ici à l'avenir.

Dockerfile


FROM openjdk:11

ENV APP_ROOT /app

COPY . $APP_ROOT
WORKDIR $APP_ROOT

ENTRYPOINT ["sh", "./gradlew", "bootRun"]

docker-compose.yml


version: '3'

services:
  web:
    build:
      #Spécifiez le chemin requis pour copier l'application dans le Dockerfile
      context: ../
      #L'emplacement du Dockerfile vu du chemin de contexte
      dockerfile: docker/Dockerfile
    volumes:
      # :La partie gauche s'adapte à votre environnement
      - ~/Dev/java/spring-boot:/app
    ports:
      - "8080:8080"

Lancement de l'environnement Docker

$ cd docker
$ docker-compose up

Confirmez qu'il est démarré et confirmez que http: // localhost: 8080 s'affiche à nouveau.

HotDeploy Puisque nous utilisons spring-boot-devtools, HotDeploy est appliqué. Essayez de changer les caractères dans Hello World dans Application.java Vous pouvez voir Java redémarrer après quelques secondes (à partir du journal docker-compose up) Lorsque vous rechargez le navigateur, vous pouvez voir que les caractères ont changé.

Débogage à distance avec IntelliJ

Paramètres IntelliJ

Puisque je veux définir un point d'arrêt en développement et l'arrêter, j'ai défini le débogage à distance. Tout d'abord, ouvrez Exécuter → Modifier les configurations ... dans le menu IntelliJ. Sélectionnez Télécommande à partir du bouton + en haut à gauche. Avec les paramètres suivants, appuyez sur OK pour fermer.

Ajoutez ce qui suit à build.gradle

build.gradle


bootRun {
    // for remote debug
    jvmArgs "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"
}
Correction de docker-compose.yml

Comme le port 5005 est utilisé pour le débogage à distance, il est décrit.

docker-compose.yml


ports:
   - "8080:8080"
   # for remote debug
   - "5005:5005"
démarrer docker

Faites à nouveau docker-comose et vérifiez qu'il est en état de veille.

web_1  | > Task :bootRun
web_1  | Listening for transport dt_socket at address: 5005

Mettre un point d'arrêt dans Hello World dans Application.java Si vous accédez à http: // localhost: 8080, vous pouvez voir qu'il s'arrête à cet emplacement. スクリーンショット 2019-12-29 17.28.56.png

en conclusion

Pour le moment, j'ai résumé comment le construire facilement.

Recommended Posts

Construction de l'environnement de développement Java Spring Boot + Docker
Construction de l'environnement Docker × Spring Boot
construction d'environnement de développement Java
[Spring Boot] Construction de l'environnement (macOS)
Créer un environnement de développement Spring Boot avec docker
Création d'un environnement de base de données avec Docker dans Spring Boot (IntellJ)
Créer un environnement de développement Java + Spring avec VirtualBox + Ubuntu (Xfce4)
◆ Spring Boot + note de construction de l'environnement gradle
[Java] Construction de l'environnement
Environnement de développement Java
[Printemps] Construction de l'environnement
Création d'un environnement de développement Spring Boot dans Vagrant
[Traitement x Java] Création d'un environnement de développement
Mémo de construction de l'environnement Spring Boot sur Mac
Construction de l'environnement de développement Laravel avec Docker (Mac)
Créer un environnement de développement Spring Boot-gradle-mysql avec Docker
[Docker] Construction de l'environnement de développement Rails6 / Ruby2.7 / MySQL8
Essayez Spring Boot 1 (Construction de l'environnement ~ Démarrage de Tomcat)
Mémo de l'environnement de développement Java
Construction de l'environnement Rails Docker
Environnement de développement-développement Spring Boot-
Procédure de construction de l'environnement JAVA + STS (Spring Tool Suite)
Créer un environnement de développement pour Docker, Java, vs code
Procédure de construction de LINE Bot x Java (Spring Boot)
Procédure de construction et de développement de l'environnement local Wordpress avec Docker
Construction de l'environnement de développement Rails6 [Mac]
Environnement de développement WSL2 + VSCode + Docker
Créer un environnement de développement Java sur l'installation Mac-JDK (version de préservation 2020)
[Mac] Construction de l'environnement de développement VS Code (Java, Gradle, Node.js)
Mémo de construction de l'environnement MySQL 5.7 (Docker)
Environnement de développement Java (Mac, Eclipse)
Construction de l'environnement JavaFX dans Java 13
Mémo de construction de l'environnement Redmine (Docker)
Application Java CICS-Run - (4) Application Spring Boot
[Docker] Construction de l'environnement Rails 5.2 avec docker
Spring Boot à partir de Docker
Construction de l'environnement AtCoder Challenge (Java 8)
[Java] [Spring] Spring Boot 1.4-> 1.2 Note de rétrogradation
Essayez de créer un environnement de développement Java à l'aide de Docker
[Docker] postgres, construction de l'environnement pgadmin4
Docker x Java Construire un environnement de développement trop simple
Construction d'environnement de développement d'applications Web en Java (pour les personnes inexpérimentées)
Construction d'environnement de développement d'applications Web Java avec VS Code (struts2)
Créez un environnement de développement d'applications Rails avec Docker [Docker, Rails, Puma, Nginx, MySQL]
Présentation de Spring Boot2, un framework Java pour le développement Web (pour les débutants)
Développement piloté par domaine avec Java et Spring Boot-Layer et division de modules
Créer un environnement de développement d'équipe Java et JavaScript (construction d'environnement gradle)
Créer un environnement de développement Web APP avec Java + Spring avec Visual Studio Code
[Construction de l'environnement de développement Java] Installez OpenJDK 11 (Java 11) sur macOS avec Homebrew
Créer un environnement Node.js avec Docker Compose
Développement d'applications Spring Boot dans Eclipse