[JAVA] Créer un micro service avec Spring Boot

introduction

Certains des projets auxquels j'ai participé ont précédemment adopté une architecture appelée microservices. Il semble que le mot «micro service» soit très populaire depuis longtemps, mais à ce moment-là je ne le savais pas, et je me souviens avoir été embarrassé par le malentendu qu'il s'agissait d'un service Microsoft. Cependant, même à ce moment-là, j'ai terminé le développement avec une compréhension vague en raison de l'occupation du projet, alors j'ai ressenti un sentiment de crise si j'oubliais complètement tout comme c'était et j'ai décidé d'étudier dur. J'ai déjà créé un service avec Java et Spring Boot, mais cette fois, j'aimerais créer un micro service dans un environnement similaire en tant que révision. C'est un service REST très simple à créer.

Qu'est-ce qu'un micro service?

L'explication que j'ai en fait reçue était que, contrairement aux applications conventionnelles (il semble que ce soit des applications monolithiques) où une seule application a toutes les fonctions, j'ai développé individuellement plusieurs petits (micro) services. C'était comme travailler ensemble pour créer un grand système. En d'autres termes, les microservices sont, au sens large, une méthode de création de logiciels. Le service créé sur la base de cette idée a également été appelé un micro service.

À l'époque, j'en étais convaincu, mais plus je recherchais, plus les explications différaient légèrement d'une personne à l'autre, et j'étais confuse sur la définition des microservices. Cela devrait être tout, microservice est un soi-disant mot à la mode, et il semble qu'il n'y ait pas de définition stricte. Parmi eux, les caractéristiques souvent mentionnées sont les suivantes.

-Chaque service peut être déployé indépendamment -Chaque service fonctionne dans un processus et communique avec une API légère (HTTP, etc.) ・ Les services sont divisés d'un point de vue commercial ・ Chaque service est automatiquement déployé ・ Éliminez autant que possible la gestion centralisée. Ne pas contrôler le langage, la base de données, l'équipe de développement (en bref, chaque service peut être écrit dans un langage de programme différent, etc.)

mérite

Je n'entrerai pas dans grand chose ici, mais si vous regardez les avantages du développement de microservices, vous en verrez beaucoup. Lorsque j'ai décidé de créer un service, la plupart des autres services ont été développés dans le langage go. Bien sûr, on m'a aussi dit de développer dans la même langue à moins qu'il y ait une raison particulière, mais à ce moment-là je n'y avais jamais touché, «je ne peux pas l'implémenter en étudiant désormais même si la date de livraison est proche. Après avoir malaxé "Desu" de toutes mes forces, on m'a dit avec un sourire amer, la permission de développer avec Java que j'étais habitué à écrire, et comment créer un environnement. Ce genre d'égoïsme est passé

Éliminez au maximum la gestion centralisée. Ne pas contrôler la langue, la base de données, l'équipe de développement

Je pense que c'est l'un des avantages des microservices. De plus, comme chacun est un service faiblement couplé, j'aimerais essayer quelque chose de nouveau, mais j'ai un peu peur. Même dans de tels cas, vous pouvez choisir un service à faible risque et l'essayer.

Démérite

Bien entendu, il existe divers inconvénients. En divisant le service, chaque service est simple, mais globalement cela devient très compliqué. Aussi, ・ Vous pouvez écrire dans différentes langues pour chaque service. ・ Nouvelle technologie facile à essayer En ce qui concerne les points mentionnés comme mérites tels que, c'est bien lors du développement d'un nouveau, mais quand il s'agit de maintenance, cela semble être un inconvénient car il est nécessaire de rassembler des ingénieurs capables de gérer chacun.

Qu'est-ce que Spring Boot?

Il s'agit d'un framework permettant de créer facilement des applications Web avec Spring Framework, qui est un framework Java. Étant donné que le fichier d'exécution contient un conteneur Web (tomcat ou jetty), il peut être lancé comme une seule application sans préparer un serveur Web distinct.

Préparer un environnement de développement

Installez Java et Maven pour créer en Java. (J'ai confirmé l'opération avec JDK1.8.) Le PC que j'ai utilisé était un Mac, donc ↓ m'a été utile. https://qiita.com/amemolee/items/6f33b8e321cc9395b0cf

Installez Spring Tool Suite (STS). STS est un environnement de développement intégré spécialisé dans le développement du Spring Framework. La base est Eclipse. La méthode de fonctionnement de base est presque Eclipse. Téléchargez et installez à partir de ↓. https://spring.io/tools

Je veux exécuter l'application créée avec le docker, je vais donc insérer le docker. https://docs.docker.com/docker-for-mac/install/

Au fait, mon environnement est le suivant. ・ JDK 1.8 ・ Maven 3.6.0 ・ Spring Tool Suite 4.0.1

Créer un service

Ensuite, je le ferai immédiatement.

Créer un projet

  1. Après avoir ouvert STS, sélectionnez Fichier> Nouveau> Projet Spring Starter.
  2. Choisissez un nom de projet et un package, puis cliquez sur "Suivant". スクリーンショット 2018-12-16 18.57.53.png
  3. Puisqu'il passera au réglage des dépendances, cochez [Web] → [Web] et cliquez sur "Terminer". スクリーンショット 2018-12-16 18.52.33.png Je pense que vous pouvez créer un projet avec le nom que vous avez défini dans la deuxième étape. De plus, le code source Java généré automatiquement est inclus dans le package configuré. Si vous avez créé comme indiqué dans l'image ci-dessus, le projet «testservice» doit être créé et «TestserviceApplication.java» doit être créé dans le package com.microservice sous src / main / java. スクリーンショット 2018-12-17 1.30.33.png

Modifier la source

Modifiez le fichier source Java généré.

TestserviceApplication.java


package com.microservice;

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;

@SpringBootApplication
public class TestserviceApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestserviceApplication.class, args);
    }
}
@RestController
class HomeController {
    @RequestMapping("/")
    public HogeTest getSentence() {
        return new HogeTest("tester");
    }
}
class HogeTest {
    private String info;
    public HogeTest (String info) {
        this.setInfo(info);
    }
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
}

C'est un processus qui renvoie un simple JSON. Le contenu du code source sera omis cette fois. Lorsque vous éditez la source, vous pouvez la vérifier en exécutant [Exécuter] → [Exécuter en tant que] → [Spring Boot App] dans le champ STS, mais pour le moment, passons à l'explication de la création d'un fichier exécutable.

Créer un fichier exécutable

Créez un fichier jar avec la fonction d'installation de Maven. Dans le terminal, allez dans le répertoire du projet "testservice" et exécutez la commande suivante.

mvn install

En cas de succès, vous devriez avoir un fichier exécutable nommé "testservice-0.0.1-SNAPSHOT.jar" sous le répertoire cible. Faisons cela. Exécutez la commande suivante directement sous le répertoire du projet "testservice".

java -jar target/testservice-0.0.1-SNAPSHOT.jar

Accédez à "http : // localhost: 8080" avec un navigateur, et c'est OK si ce qui suit est affiché.

スクリーンショット 2018-12-18 2.10.16.png

Après confirmation, arrêtez le service en appuyant sur "contrôle + c" sur le terminal.

Déployer sur Docker

Enfin, déployez l'exécutable en tant qu'image Docker. Docker est un service de virtualisation de type conteneur. Un conteneur est un environnement d'exécution de processus quelque peu indépendant qui est isolé des autres processus. Le programme créé cette fois peut également être exécuté sur le conteneur Docker. Semblable à JVM, Docker absorbe les différences de système d'exploitation. Par conséquent, si le programme peut être exécuté sur le conteneur, il peut être facilement déplacé vers d'autres environnements tels que l'environnement de production. (On suppose que Docker est également inclus dans cet environnement.)

Créer une image Docker

Maintenant, créons une image Docker, qui est le système de fichiers requis pour créer un conteneur Docker. Préparez le fichier d'exécution "testservice-0.0.1-SNAPSHOT.jar" créé cette fois, et créez un fichier texte nommé "Dockerfile" dans le même répertoire. Un Dockerfile est un fichier qui contient des instructions pour créer une image. Dans le fichier, décrivez comme suit.

Dockerfile


FROM frolvlad/alpine-oraclejdk8:slim
ADD testservice-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:dev/./urandom -jar /app.jar"]

Une fois que vous avez un Dockerfile, vous pouvez créer l'image avec la commande suivante.

docker build -t microtest ./

Démarrer le conteneur

Démarrez le conteneur en fonction de l'image créée avec la commande suivante.

docker run -p 8080:8080 -d -t microtest

Il est difficile à comprendre car il s'exécute en arrière-plan, mais vous pouvez vérifier s'il s'exécute avec la commande suivante.

docker ps

C'est OK s'il s'affiche comme ↓. スクリーンショット 2018-12-18 2.06.10.png

Si vous essayez à nouveau d'accéder à "http : // localhost: 8080" avec un navigateur, vous verrez {"info": "test"} au format JSON comme auparavant.

à la fin

J'ai essayé de le créer pour le moment, mais il y a encore des parties qui ne répondent pas aux fonctionnalités ci-dessus telles que l'automatisation du déploiement. SpringBoot a une fonction qui est automatiquement exécutée au moment de la construction si vous écrivez du code de test dans JUnit etc. et le placez à l'emplacement spécifié. Il peut également être déployé sur Docker. En d'autres termes, il est possible d'exécuter le test lors de la construction, de créer un fichier exécutable s'il réussit et de le déployer sur Docker, mais ~~ J'ai oublié comment le faire ~~ Ce sera long, je vais donc saisir une autre opportunité. ..

Site de référence

https://blog.guildworks.jp/2015/01/27/docker-with-spring-boot/

Recommended Posts

Créer un micro service avec Spring Boot
Créez une application avec Spring Boot 2
Créez une application avec Spring Boot
Télécharger avec Spring Boot
Créez une application de recherche simple avec Spring Boot
Créez une application CRUD avec Spring Boot 2 + Thymeleaf + MyBatis
Créez votre propre utilitaire avec Thymeleaf avec Spring Boot
Créer un environnement Spring Boot avec Windows + VS Code
Créer un serveur API Web avec Spring Boot
Créer un environnement de développement Spring Boot avec docker
Créez un serveur Spring Cloud Config en toute sécurité avec Spring Boot 2.0
Générer un code à barres avec Spring Boot
Implémenter GraphQL avec Spring Boot
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Spring Boot à partir de Docker
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Envoyer du courrier avec Spring Boot
Créer Restapi avec Spring Boot (jusqu'à l'exécution de l'application)
Créez un site de démonstration simple avec Spring Security avec Spring Boot 2.1
Utiliser l'authentification de base avec Spring Boot
gRPC sur Spring Boot avec grpc-spring-boot-starter
Déploiement à chaud avec le développement Spring Boot
Liaison de base de données avec doma2 (Spring boot)
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot
Créer une application d'enquête avec Spring Boot
Obtenez des résultats de validation avec Spring Boot
(Intellij) Hello World avec Spring Boot
Google Cloud Platform avec Spring Boot 2.0.0
J'ai essayé GraphQL avec Spring Boot
[Java] Intégration LINE avec Spring Boot
À partir de Spring Boot 0. Utilisez Spring CLI
J'ai essayé Flyway avec Spring Boot
La coopération des messages a commencé avec Spring Boot
Traitement lors du démarrage d'une application avec Spring Boot
Création d'un environnement de développement Spring Boot dans Vagrant
Hello World avec Eclipse + Spring Boot + Maven
Envoyez des notifications régulières avec LineNotify + Spring Boot
Effectuer un test de confirmation de transaction avec Spring Boot
Comment créer votre propre contrôleur correspondant à / error avec Spring Boot
HTTPS avec Spring Boot et Let's Encrypt
Créer un environnement de développement Spring Boot-gradle-mysql avec Docker
Défi Spring Boot
Essayez d'utiliser Spring Boot avec VS Code
Créer un projet Java Spring Boot avec IntelliJ
Démarrez le développement d'applications Web avec Spring Boot
Lancez l'application Nginx + Spring Boot avec docker-compose
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
Forme de botte de printemps
Implémenter CRUD avec Spring Boot + Thymeleaf + MySQL
Traitement asynchrone avec Spring Boot en utilisant @Async