Springboot est une mise à niveau de SpringMVC, ce qui est plus facile pour le codage, la configuration, le déploiement et la surveillance.
Microservices
Microservices est une architecture de logiciels émergente qui divise une grande application et un service dans des dizaines de microservices pris en charge. Une stratégie de microservice peut faciliter le travail, ce qui peut mettre à l'échelle un seul composant au lieu d'une pile d'application entière, répondant ainsi aux protocoles au niveau du service.
Spring fournit un ensemble complet de composants pour les microservices - Springcound, et Spirngboot est la base.
Le premier programme Springboot
Le logiciel de développement utilisé ici est IntelliJ Idea, qui n'est pas très différent d'Eclipse, avec une interface plus fraîche et des fonctions plus puissantes; Android Studio est développé sur la base de l'Intellij. J'ai déjà utilisé Android Studio, et les interfaces des deux sont presque les mêmes.
Intellij Idea Site officiel: http://www.jetbrains.com/idea/
Après avoir configuré Maven, Tomcat, JDK, vous pouvez l'utiliser
L'image du cloud Alibaba de l'entrepôt central configuré par Maven, la vitesse du téléchargement de packages en pot à cette adresse, qui sait qui l'utilise!
setting.xml
.. <Mirrors> <Mirror> <id> alimaven </id> <name> Aliyun maven </name> <url> http://maven.aliyun.com/nexus/content/groups/public/ </url> <Mirrorof> Central </irrorof> </public>. .
Créer des projets Springboot avec l'idée
My Idea Version: Intellij Idea 2016.3.1
La structure du projet est:
Le fichier maven pom.xml par défaut pour le projet
pom.xml
<? xml version = "1.0" Encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" XSI: ScheMalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> </ Modelversion> 4.0.0 </ Modelversion> <ProupId> com.jxust </prouventid> <ArtefactId> SpirngbootDemo </ ArtifactId> <Dersion> 0.0.1-Snapshot </DERNIFRIENT> <MAPPALLAGE> JAR </ Packaging> <name> SpirngbootDemo </name> <Dcription> Demo Project for Spring Boot </Scription> <parent> <proupId> org.springFramework.boot </preppleting> <ArtefactId> Spring-Boot-Starter-Parent </ ArfactId> <Dersion> 1.4.2.Release </DERNIFRIMINE> <RelativePath /> <! - Recherche Parent du référentiel -> </parent> </ Properties> <projeil.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputencoding> utf-8 </project.reportting.outputencoding> <java.version> 1.8 </java.version> </properties> <dependces> <dependency> <proupId> org.springframework.boot </proupId> <ArtifActid> Spring-boot-starter-starter-web </ arrifact> <dependency> <proupId> org.springframework.boot </proupId> <ArtifactId> Spring-Boot-starter-test </ artifactid> <ccope> test </cope> </dependency> </dependance> </ build> <lagins> <proupId> org.springframework.boot </proupId> <ArtefactId> Spring-Boot-Maven-Plugin </ ArfactId> </Glugin> </Glugins> </Duild> </randing>
Exécutez la méthode principale de SpirngbootDemoApplication et vous pouvez commencer à fonctionner.
Pour d'autres méthodes de démarrage, veuillez consulter le tutoriel vidéo http://www.imooc.com/learn/767/
Sortie de la console:
"C: / Program Files / Java / JDK1.8.0_91 / bin / java" ..... ____ __ __ /// ___'_ __ __ _ (_) _ ___ __ / / / / / / () / ___ | '_ |' _ | | / / / / / / / / / / / / / / / / / | | | | | | | | | | | | || (_ | |))) '| ____ | | | | | | | | | || (_ | |))))' | ____ | .__ || | _ | | _ | | _ / __, | / / / / / ==================================== ____ / = / _ / _ / :: Spring Boot :: (V1.4.2.2.release) startup2016-12-16 14:56:52.215 INFO 15872 --- [ main] sbcetTomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)2016-12-16 14:56:52.255 INFO 15872 --- [ main] sbcetTomcatEmbeddedServletContainer : Tomcat started on Port (s): 8080 (http) 2016-12-16 14: 56: 52.255 info 15872 --- [Main] SBCETTOMCATEMEDDEDSERVletContainer: Tomcat a commencé sur le port (s): 8080 (http) 2016-12-16 14: 56: 52.255 Info 15872 --- [Main] SBCETTOMCATEMBEDDEDSERVletContainer: Tomcat Démarré sur les ports (s): 8080 (HTTP) 2016-12-16 14: 56: 52.255 Info 15872 --- [Main] Com.jxust.SpirngbootDemoapplication: Jvm Faire SpirngbootDemoapplication en 7.795 secondes (JVM pour 9.1777
De là, vous pouvez voir le numéro de port de Tomcat. Puisqu'il n'y a pas de contrôleur personnalisé, il n'y a pas encore de vue. Créons une vue qui produit Hello Springboot!.
Créez un HelloController, situé sous le package du contrôleur
HelloController.java
package com.jxust.controller; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.restController; / ** * créé par Peng * time: 2016/12/16 15:45 * / @ restControllerPublic Class Hellocontller { @RequestMapping ("/ Hello") public String Says () {return "Hello Springboot!"; }}@RestController Nouvelle Annotation après Spring4. Il s'avère que le retour JSON nécessite que @ResponseBody coopère avec @Controller. Maintenant, l'un est les deux meilleurs
Entrez http: // localhost: 8080 / bonjour dans le navigateur pour produire la phrase bonjour Springboot!
Configuration de la propriété personnalisée
Le fichier application.properties est utilisé
Configurer le numéro de port et le préfixe d'accès
application.propertiesserver.port = 8081server.context-path = / springboot
En plus d'utiliser des fichiers de format .properties, vous pouvez également utiliser des fichiers de configuration de format .yml (recommandé), ce qui est plus facile
application.yml
Supprimer le fichier application.properties d'origine
Faites attention au format, les espaces ne peuvent pas être manquants
Obtenez la valeur d'attribut dans le fichier de configuration
Nous pouvons également configurer des données dans le fichier de configuration et l'obtenir dans le contrôleur, par exemple:
application.yml
Serveur: Port: 8081 Context-Path: / SpringbootName: Xiaopang
HelloController obtient la valeur du fichier de configuration
HelloController.java
.... @ RestControllerPublic classe HelloController {@Value ("$ {name}") Nom de chaîne privée; @RequestMapping (value = "/ hello", méthode = requestMethod.get) public String says () {return name; }} La valeur renvoyée du nom
Diversification des méthodes de configuration de la valeur dans les fichiers de configuration
Les valeurs du fichier de configuration peuvent être multiples ou combinées, telles que:
application.yml
Nom: xiaopang Âge: 22 ou nom: xiaopang Âge: 22Content: "Nom: $ {nom}, âge: $ {âge}" ou serveur: port: 8081 Path de contexte: / Springbootperson: Nom: xiaopang Âge: 22Les deux premières configurations sont de la même manière pour obtenir des valeurs, mais pour cette méthode, la personne a deux propriétés correspondantes, qui doivent être gérées de cette manière.
Personproperties.java
package com.jxust; import org.springframework.boot.context.properties.configurationproperties; import org.springframework.sterreeotype. Âge entier privé; public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public Integer Getage () {Return Age; } public void Setage (entier Âge) {this.age = age; }}ALT + insérer des invites de clé de raccourci pour générer un getteur et un setter
pom.xml doit ajouter les dépendances suivantes pour gérer les avertissements
<dependency> <proupId> org.springframework.boot </proupId> <ArtifactId> printemp-boot-configuration-processor </ artifactId> <Oraloveal> true </opultal> </ Dependency>
HelloController.java
package com.jxust.Controller; import com.jxust.personproperties; import org.springframework.beans.factory.annotation.autowired; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestMethod; org.springframework.web.bind.annotation.restController; / ** * Créé par Peng * Time: 2016/12/15 20:55 * / @ restControllerPublic class HelloController {@Autowired PersonProperties PersonProperties; @RequestMapping (value = "/ hello", méthode = requestMethod.get) public String Says () {return PersonProperties.getName () + PersonProperties.getAGE (); }}À propos du fichier de configuration application.yml plusieurs ensembles de configurations
Semblable à l'internationalisation des fichiers IL8N, i18n_en_us.properties et i18n_zh_cn.properties
Cela peut résoudre l'embarras des modifications de configuration fréquentes
Il appartient au fichier de configuration Application.yml pour décider du fichier de configuration à utiliser.
application.yml
Spring: Profils: actif: A
application-a.yml
Serveur: Port: 8081 Context-Path: / SpringbootPerson: Nom: Xiaoleage: 21
application-b.yml
Serveur: Port: 8081 Context-Path: / Springbootperson: Nom: xiaopang Âge: 22
Springboot ajoute, supprime et modifie pour vérifier les exemples
Structure complète du projet
Utilisation du contrôleur
Utilisation du contrôleur
@Controller CHU gère la demande HTTP
@RestController Nouvelle Annotation après Spring4, il s'avère que Retour JSON exige que @ResponseBody coopère avec @Controller
@Requestmapping Configurer le mappage de l'URL
Demandes de style de repos
Pour les annotations sur les méthodes dans le contrôleur
@RequestMapping (value = "/ hello", méthode = requestMethod.get) @RequestMapping (value = "/ hello", méthode = requestMethod.Post) @RequestMapping (value = "/ hello", méthode = requestMethod.delete) @RequestMapping (value = "/ hello", méthode = requestMethod.Put)
Springboot simplifie l'annotation ci-dessus
@Getmapping (value = "/ girls") @postmapping (value = "/ girls") @putmapping (value = "/ girls / {id}") @deletemapping (value = "/ girls / {id}")Le navigateur doit envoyer des demandes de différentes manières, et vous pouvez installer le plug-in httprequester, et Firefox Browser peut rechercher directement ce composant à installer.
printemps-data-jpa
JPA Nom complet Java Persistance API.jpa décrit la relation de cartographie d'une table d'objet-relation via JDK 5.0 Annotation ou XML, et persiste les objets entités en cours d'exécution dans la base de données.
HiberNate3.2 +, TopLink 10.1.3 et OpenJPA fournissent tous une implémentation JPA.
Créez une base de données MySQL à l'aide de JPA
pom.xml ajoute des dépendances JPA et MySQL
<dependency> <proupId> org.springframework.boot </rompuprid> <lefactive> printemps-boot-starter-data-jpa </ artifactid> </dependency> <dependency> <proupId> mysql </prouprid> <prifactid> mysql-connector-java </letifactid> </sédiction>
Configuration de la JPA et de la base de données
application.yml
Spring: Profiles: Active: A DataSource: Driver-Class-Name: com.mysql.jdbc.driver URL: JDBC: MySQL: //127.0.0.1: 3306 / DB_PERSON USERNAME: ROOT PASSOT: ROOT JPA: Hibernate: DDL-AUTO: Mise à jour Show-SQL: TRUE
Le format est important
Vous devez créer manuellement la base de données DB_Serson
Créer une classe d'entité de personne correspondant au tableau de données
Personne.java
package com.jxust.entity; import javax.persistence.entity; import javax.persistence.generatedValue; import javax.persistence.id; / ** * créé par Peng * time: 2016/12/16 17:56 * / @ entityPublic classe personne {@id @ denereatedvalue private Integer id; nom de chaîne privé; Âge entier privé; // Le constructeur doit être public () {} public Integer getID () {return id; } public void setid (INGER ID) {this.id = id; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public Integer Getage () {Return Age; } public void Setage (entier Âge) {this.age = age; }}Après avoir exécuté le projet, vérifiez la base de données et la personne du tableau sera automatiquement créée
mysql> Utilisez db_person; base de données changéemysql> desc Personne; + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | NULL | | + ------------------------ + --------- + ---------------------------- + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Ensuite, vous pouvez ajouter, supprimer, modifier et vérifier la table de la personne
Créer un contrôleur PersonController.java
Créez d'abord un personnage d'interface, situé dans le package DAO. PersonController appelle la méthode héritée de JParePository pour réaliser l'interaction avec la base de données.
La fonction de cette interface PersonRepository est similaire à la fonction d'interface de la couche DAO dans le cadre SSM; Dans le cadre SSM, la couche de service exécute indirectement les instructions SQL correspondantes dans le fichier de mappage de la base de données MyBatis (.xml) via cette interface et effectue les opérations de l'ajout, de la suppression, de la modification et de la recherche de la base de données. (Mapper implémente automatiquement l'interface DAO)
Personrepository.java
package com.jxust.dao; import com.jxust.entity.person; import org.springframework.data.jpa.repository.jParepository; / ** * créé par Peng * Time: 2016/12/16 18:07 * / public interface PersonPository étend JParepository <Person, Integer> {}PersonController.java
package com.jxust.controller; import com.jxust.dao.personrepository; import com.jxust.entity.eson; import org.springframework.beans.factory.annotation.getowired; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.restController; import java.util.list; / ** * créé par Peng * Time: 2016/12/16 18:04 * / @ RESTControllerPublic Class PersonController {@Autowired PersonPository Personerpository; @GetMapping (value = "/ personne") Liste privée <ongest PersonList () {return PersonRoSitory.Findall (); }}Ajoutez deux données à la base de données
MySQL> SELECT * FROM Person; + --- + ----- + ------ + | ID | Âge | Nom | + ---- + ------- + ------- + | 1 | 23 | Charlotte || 2 | 21 | Ma dongmei | + ---- + ------- + ------ + 2 rangées en jeu (0,04 sec)
Démarrez la demande d'exécution du projet http: // localhost: 8081 / Springboot / personne
STOCKS SQL Sortie par la console:
HiberNate: sélectionnez Person0_.id comme id1_0_, person0_.age en tant qu'âge2_0_, personne0_.name comme name3_0_ de la personne Person0_
Autres méthodes d'ajout, de supprimer, de modifier et de vérifier
PersonController.java
.... / ** * Ajouter une personne * * @param name * @param Âge * @return * / @postmapping (value = "/ personne") Personne publique Personadd (@RequestParam ("name") Nom de la chaîne, @RequestParam ("Age") entier Âge) {Person Person = new Person (); personne.setName (nom); Person.Setage (âge); RETOUR PERSONROSITORY.SAVE (PERSON); } / ** * requête une personne * * @param id * @return * / @getmapping (value = "/ personne / {id}") Person PersonFindone (@Pathvariable ("id") ID ID) {return PersonPository.FindOne (id); } / ** * Supprimer une personne * * @param id * / @deletemapping (value = "/ personne / {id}") public void Persondelelete (@Pathvariable ("id") INTER ID) {PersonRepository.Delete (id); } / ** * Mettre à jour une personne * * @param id * @param name * @param Âge * @return * / @putmapping (value = "/ personne / {id}") Person PersonupDate (@Pathvariable ("id") ID entier, @RequestParam ("nom") Nom de chaîne, @requestParam ("Age") Integer Age) {Person Person = New Person (); personne.setid (id); personne.setName (nom); Person.Setage (âge); RETOUR PERSONROSITORY.SAVE (PERSON); }La méthode de demande correspondante est:
Interroger un utilisateur:
Ajouter un utilisateur
Supprimer un utilisateur (pas de valeur de retour)
Mettre à jour un utilisateur
Alors, puis-je vérifier en fonction de l'âge? La réponse est que ce n'est pas encore possible
D'après les instructions de la console, on peut voir que les instructions SQL sont interrogées en fonction de l'ID
Hibernate: sélectionnez Person0_.id comme id1_0_0_, personne0_.age en tant qu'âge2_0_0_, personne0_.name as name3_0_ de la personne Person0_ où personne0_.id =?
Requête par âge
Ajoutez une méthode à PersonRepostory FindByage (âge entier)
Interface publique PersonPository étend JParepository <Person, entier> {/ ** * Query by Age * Nom de la méthode FindByage * @Param Age * @return * / Liste publique <Person> FindByage (Ageger Age);}Ajouter la méthode de requête correspondante à PersonController
.... / ** * Query by Age * @param Age * @return * / @getmapping (value = "/ personne / Âge / {age}") Liste publique <ponse> PersonListByage (@pathvariable ("" Age ") entier Âge) {retour PersonPository.FindByage (âge); }Entrez la demande http: // localhost: 8081 / Springboot / Person / Age / 23 pour interroger la personne avec 23 ans
La console produit l'instruction SQL:
Hibernate: sélectionnez Person0_.id As ID1_0_, Person0_.age As Age2_0_, Person0_.name as name3_0_ de Person Person0_ Where Person0_.age =?
Gestion des transactions
Deux instructions SQL sont exécutées dans une méthode en même temps. Afin d'empêcher une instruction SQL d'exécuter avec succès et l'autre instruction SQL de l'échec, la gestion des transactions est introduite. @Transactional Transaction Annotation est nécessaire pour ajouter la méthode.
Les transactions garantissent l'intégrité et la cohérence des données de base de données
PersonService.java
Dans PersonControll
Package com.jxust.service; import com.jxust.dao.personrepository; import com.jxust.entity.eson; import org.springframework.beans.factory.annotation.autowired; import org.springframework.sterreoType.Service; Import Javax.transaction.transactional; / ** * CRÉAGE; Time: Pengh 2016/12/16 19:30 * / @ ServicePublic Class PersonService {@autowired PersonPository PersonPository; / ** * Test de gestion des transactions * Deux éléments de données réussissent en même temps, ou ne réussissent pas en même temps * assurer l'intégrité et la cohérence des données de base de données * / @Transactional public void insertTwo () {Person Persona = new Person (); persona.setName ("qiuya"); persona.setage (19); PersonRepository.save (Persona); System.out.print (1/0); Personne personne = new personne (); PersonB.setName ("Mengtejiao"); PersonB.Setage (25); PersonRepository.save (PersonB); }}Tester en urgence
... @Autowired Private Personservice PersonService; ... / ** * Test de transaction * / @postMapping ("/ Person / Two") public void PersonTwo () {PersonService.InsertTwo (); }Relancer le projet et exécuter la méthode de la demande de post http: // localhost: 8081 / Springboot / personne / deux
Le premier morceau de données n'a pas été ajouté à la base de données, indiquant qu'il y a une gestion des transactions
Complete PersonController.java, PersonRepository.java et Pom.xml
PersonController.java
package com.jxust.Controller; import com.jxust.dao.personrepository; import com.jxust.entity.person; import com.jxust.service.personservice; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation. *; java.util.list; / ** * Créé par Peng * Temps: 2016/12/16 18:04 * / @ RESTControllerPublic class PersonController {@Autowired PersonPository PersonRepository; @Autowired Private Personservice PersonService; / ** * interroge la liste de tout le personnel * * @return * / @getmapping (value = "/ personne") Liste privée <ponse> PersonList () {return PersonRepository.Findall (); } / ** * Ajouter une personne * * @param nom * @param age * @return * / @postmapping (value = "/ personne") Person public Personadd (@RequestParam ("name") Nom de la chaîne, @RequestParam ("Age") entier Âge) {Person Person = new Person (); personne.setName (nom); Person.Setage (âge); RETOUR PERSONROSITORY.SAVE (PERSON); } / ** * requête une personne * * @param id * @return * / @getmapping (value = "/ personne / {id}") Person PersonFindone (@Pathvariable ("id") ID ID) {return PersonPository.FindOne (id); } / ** * Supprimer une personne * * @param id * / @deletemapping (value = "/ personne / {id}") public void Persondelelete (@Pathvariable ("id") INTER ID) {PersonRepository.Delete (id); } / ** * Mettre à jour une personne * * @param id * @param name * @param Âge * @return * / @putmapping (value = "/ personne / {id}") Person PersonupDate (@Pathvariable ("id") ID entier, @RequestParam ("nom") Nom de chaîne, @requestParam ("Age") Integer Age) {Person Person = New Person (); personne.setid (id); personne.setName (nom); Person.Setage (âge); RETOUR PERSONROSITORY.SAVE (PERSON); } / ** * Query by Age * @param Age * @return * / @getmapping (value = "/ personne / Âge / {age}") Liste publique <ponse> PersonListByage (@Pathvariable ("Age") entier Âge) {retour PersonPository.FindByage (âge); } / ** * Test de transaction * / @postMapping ("/ Person / Two") public void PersonTwo () {PersonService.InsertTwo (); }}Personrepository.java
package com.jxust.dao; import com.jxust.entity.person; import org.springframework.data.jpa.repository.jParepository; import java.util.list; / ** * créé par Peng * time: 2016/12/16 18:07 * / interface publique Personnes expositaires jpares par âge * Nom de la méthode Fixe * @param Âge * @return * / Liste publique <ponse> findByage (entier de l'âge);}
pom.xml
<? xml version = "1.0" Encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" XSI: ScheMalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> </ Modelversion> 4.0.0 </ Modelversion> <ProupId> com.jxust </prouventid> <ArtefactId> SpirngbootDemo </ ArtifactId> <Dersion> 0.0.1-Snapshot </DERNIFRIENT> <MAPPALLAGE> JAR </ Packaging> <name> SpirngbootDemo </name> <Dcription> Demo Project for Spring Boot </Scription> <parent> <proupId> org.springFramework.boot </preppleting> <ArtefactId> Spring-Boot-Starter-Parent </ ArfactId> <Dersion> 1.4.2.Release </DERNIFRIMINE> <RelativePath /> <! - Recherche Parent du référentiel -> </parent> </ Properties> <projeil.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputencoding> utf-8 </project.reportting.outputencoding> <java.version> 1.8 </java.version> </properties> <dependces> <dependency> <proupId> org.springframework.boot </proupId> <ArtifActid> Spring-boot-starter-starter-web </ arrifact> <dependency> <proupId> org.springframework.boot </proupId> <ArtifactId> printemp-boot-starter-test </letifactid> <ccope> test </cope> </dendency> <dependency> <proupId> org.springframework.boot </provistid> artifactid> spring-boot-consist-processor </ artifactive> printemp-boot-consist-processor-processor </ artifactive> spring-boot-cenfigfiguration-processor </ artifactive> <Orultational> true </acultational> </dependency> <dependency> <proupId> org.springframework.boot </proupId> <Artifactid> Spring-Boot-starter-data-jpa </ artifactid> </dEpendency> <Dependency> <proupId> MySQL </prounid> </ artifactid> mysql-condector </Dependency> </Dependency> </ Build> <Glugins> <Glugin> <ProupId> org.springFramework.boot </proupId> <ArtifActid> Spring-Boot-Maven-Plugin </ ArfactId> </Glugin> </Glugins> </ Build> </randing>
Résumer
Ce qui précède est une explication détaillée de l'idée IntelliJ Idea Springboot Database Addition, Deletion, Modification and Search Exemples introduit par l'éditeur. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!