De nombreux internautes me demanderont de temps en temps, comment tester le projet Spring Boot, comment le déployer et s'il y a de bonnes solutions de déploiement en production? Cet article présentera comment Spring Boot est développé, débogué, emballé et finalement mis en production et lancement.
Étape de développement
Tests unitaires
La chose la plus importante au cours de la phase de développement est les tests unitaires. La prise en charge de Springboot pour les tests unitaires a été perfectionnée.
1. Ajouter la référence du package Spring-Boot-Starter-Test au pack POM
<dependency> <proupId> org.springframework.boot </prôdId> <ArtifactId> printemp-boot-starter-test </retifactid> <ccope> test </ccope> </Dependency>
2. Développement et test
En prenant le Helloworld le plus simple à titre d'exemple, vous devez ajouter: @runwith (springrunner.class) et @springboottest annotations au chef de classe de la classe de test. Ajoutez simplement @Test en haut de la méthode de test, et enfin cliquez avec le bouton droit sur la méthode à exécuter.
@Runwith (springrunner.class) @springboottestpublic class applicationTests {@test public void hello () {System.out.println ("Hello World"); }}En usage réel, vous pouvez injecter le code de couche DAO ou le code de couche de service en fonction de l'utilisation normale du projet pour les tests et la vérification. Spring-Boot-Starter-Test fournit de nombreux usages de base, et ce qui est encore plus rare, c'est qu'il ajoute la prise en charge des tests de couche de contrôleur.
// Vérifiez simples si le jeu de résultats est correct ASSERT.ASSERTEQUALS (3, userMapper.getall (). Size ()); // Vérifiez le jeu de résultats, invite assert.asserTrue ("Erreur, la valeur de retour correcte est 200", status == 200); ASSERT.ASSERTFALSE ("Erreur, la valeur de retour correcte est 200", statut! = 200);MockMVC est introduit pour prendre en charge les tests de la couche de contrôleur. L'exemple simple est le suivant:
classe publique HelloControLerteSts {private mockmvc mvc; // Initialiser l'exécution @Before public void setup () lève une exception {mvc = mockmvcbuilders.standalonesEtup (new HelloController ()). Build (); } // Vérifiez si le contrôleur répond normalement et imprime le résultat de retour @test public void gethello () lève une exception {mvc.perform (mockmvcrequestbuilders.get ("/ hello"). Accept (mediatype.application_json))) .Ande .anddo (mockmvcresulthandlers.print ()) .Andrenturn (); } // Vérifiez si le contrôleur répond normalement et détermine si le résultat de retour est correct @Test public void testhello () lève une exception {mvc.perform (mockmvcrequestbuilders.get ("/ hello"). Accept (mediaType.Application_json)) .Andexpect (Status (). Isok ())) .Andexpect (contenu (). String (EqualTo ("Hello"). Accept (mediaType.Application_JSON)) .Andexpect (Status (). ISOK ()) .Andexpect (Content (). String (EqualTo ("Hello World"));}}Les tests unitaires sont la première barrière pour vérifier votre code. Vous devriez développer l'habitude des tests unitaires chaque fois que vous écrivez une partie de votre code. N'attendez pas que tous soient intégrés avant les tests. Après l'intégration, il est facile de manquer les bogues au bas du code car vous faites plus attention à l'effet de fonctionnement global.
Tests d'intégration
Une fois le développement global terminé, le test d'intégration est entré. L'entrée de démarrage du projet Spring Boot se trouve dans la classe d'application. Vous pouvez démarrer le projet en exécutant directement la méthode d'exécution. Cependant, pendant le processus de débogage, nous devons constamment déboguer le code. Si vous devez redémarrer manuellement le service chaque fois que le code est modifié, il sera très gênant. Spring Boot fournit un support de déploiement à chaud de manière très considérée, ce qui est très pratique pour le débogage et l'utilisation dans les projets Web.
POM doit ajouter la configuration suivante:
<Dependces> <Dependency> <ProupId> org.springFramework.boot </proncId> <ArtifActid> printemps-boot-devtools </ artifactId> <Oraloal> true </ optional> </ Dependency> </Dependance> <uild> <gilgins> <proupId> org.springFramework.boot </proncId> <ArtefactId> Spring-Boot-Maven-Plugin </ ArfactId> <Inconfiguration> <Fourk> Vrai </ Fork> </FIGIGURATION> </GLANGIN> </GLANGS> </DUIGME>
Après avoir ajouté la configuration ci-dessus, le projet prend en charge le déploiement à chaud, ce qui est très pratique pour les tests d'intégration.
Faire la production et aller en ligne
En fait, je pense que cette étape devrait être relativement simple et généralement divisée en deux types: l'une consiste à l'emballer dans un package de pot et à l'exécuter directement, et l'autre doit l'emballer dans un package de guerre et le mettre sous le serveur Tomcat.
Faites-en un bocal
Si vous utilisez Maven pour gérer votre projet, exécutez la commande suivante
CD Project et répertoire (même niveau que pom.xml) Package MVN Clean ## ou exécutez la commande suivante ## pour exclure le code de test et le package MVN Clean Package -dmaven.test.skip = true
Une fois l'emballage terminé, le package JAR sera généré dans le répertoire cible. Le nom est généralement le nom du projet + numéro de version.jar
Démarrez la commande du package JAR
Java -Jar Target / Spring-Boot-Scheduler-1.0.0.jar
De cette façon, tant que la console est fermée, le service ne sera pas accessible. Commençons ce qui suit en fonctionnant en arrière-plan:
Nohup Java -Jar Target / Spring-Boot-Scheduler-1.0.0.jar &
Vous pouvez également choisir de lire différents fichiers de configuration au démarrage
java -jar app.jar --spring.profiles.active = dev
Vous pouvez également définir des paramètres JVM au démarrage
java -xms10m -xmx80m -jar app.jar & gradle
Si vous utilisez Gradle, utilisez la commande suivante pour emballer
gradle buildjava -jar build / libs / mymodule-0.0.1-snapshot.jar
Faites-en un sac de guerre
Le premier type peut être utilisé pour exporter le package de guerre via l'éclipse de l'outil de développement, et l'autre type est d'utiliser des commandes pour la terminer. Ici, nous présentons principalement ce dernier.
1. Projet Maven, modifiez le package POM
Volonté
<Packaging> pot </packaging>
Passer à
<Packaging> War </packaging>
2. Exclure Tomcat lors de l'emballage.
<dependency> <proupId> org.springframework.boot </proupId> <Artifactid> printemps-boot-starter-web </ artifactid> </pedigency> <dependency> <prouprid> org.springframework.boot </prouprid> <ptifactid> Spring-Boot-starter-toMcat </protifactid>
Ici, définissez la propriété Scope à fournie afin que le package JAR ne soit pas inclus dans la guerre finale, car des serveurs tels que Tomcat ou Jetty fourniront des classes API pertinentes au moment de l'exécution.
3. Enregistrez la classe de démarrage
Créer servletinitializer.java, hériter SpringbootServletinitializer, remplacer configure () et enregistrer l'application de classe de démarrage. Lorsqu'un serveur d'applications Web externe construit un contexte d'application Web, la classe de démarrage sera ajoutée.
La classe publique ServleTinitializer étend SpringbootServletInitializer {@Override Protected SpringApplicationBuilder Configure (application SpringApplicationBuilder) {return application.sources (application.class); }}Exécution finale
Package MVN Clean -dmaven.test.skip = true
Le fichier Nom + Version Number.
Grade
Si vous utilisez Gradle, l'étape de base est la même. Ajouter la prise en charge de la guerre dans Build.gradle et exclure Spring-Boot-Starter-Tomcat:
... Appliquer le plugin: 'war' ... Dependances {compile ("org.springframework.boot: printemp-boot-starter-web: 1.4.2.release") {exclure Mymodule: "Spring-boot-starter-tomcat"}} ...Utilisez à nouveau la commande build
Gradle Build
La guerre sera générée dans le répertoire Build / Libs.
Opération de production et maintenance
Afficher la valeur des paramètres JVM
Vous pouvez suivre la commande Jinfo qui vient avec Java:
jinfo -flags pid
Voyons ce que GC est utilisé après le démarrage du pot, la quantité de mémoire en lots dans la nouvelle génération et les personnes âgées. Les exemples sont les suivants:
-Xx: CicompileCount = 3 -xx: initialHapSize = 234881024 -xx: maxheapSize = 3743416320 -xx: maxNewSize = 1247805440 -xx: Minheapdeltabytes = 52428 -xx: newsize = 78118912 -xx: oldSize = 156211211212 -Xx: + useCompressionClassPointers -xx: + USECompressionoops -xx: + use Taille allocable pour la nouvelle génération de mémoire dans la zone de tas JVM ... -xx: + useParallelGC: La collection de déchets utilise un collecteur parallèle
Comment redémarrer
Simple et grossier
Tuez directement le processus et recommencez le package JAR
ps -ef | grep java ## Obtenez le programme Pidkill pour Java -9 pid ## redémarrer Java à nouveau -jar xxxx.jar
Bien sûr, cette méthode est plus traditionnelle et violente, il est donc recommandé d'utiliser la méthode suivante pour le gérer
Exécution de script
Si vous utilisez Maven, vous devez inclure la configuration suivante
<flugin> <proupId> org.springframework.boot </prôned> <ArtifActid> printemps-boot-maven-Plugin </ artifactId> <Fonfi configuration> <executable> true </ exécutable> </ configuration> </gingin>
Si vous utilisez Gradle, vous devez inclure la configuration suivante
Springboot {execute = true}Méthode de démarrage:
1. Vous pouvez commencer directement dans ./yourapp.jar
2. Inscrivez-vous en tant que service
Vous pouvez également créer un lien souple pour pointer vers votre package JAR et l'ajouter à init.d, puis le démarrer avec des commandes.
Init.D Exemple:
ln -s /var/yourapp/yourapp.jar /etc/init.d/yourappchmod + x /etc/init.d/yourapp
De cette façon, vous pouvez utiliser la commande stop ou redémarrer pour gérer votre application.
/etc/init.d/yourapp start | Stop | Redémarrer
ou
Service YourApp Start | Stop | Redémarrer
À ce stade, le test, la coordination conjointe et l'emballage de projets Springboot ont été introduits. Vous pouvez trouver du temps pour étudier le fonctionnement automatisé et la maintenance de Springboot et la combinaison de Springboot et Docker.
Exemple de code - github
Exemple de nuage de code de code
Résumer
Ce qui précède est la méthode de l'emballage et du déploiement de test de démarrage Spring vous présenté par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!