SpringBoot es una actualización a SpringMVC, que es más fácil para la codificación, la configuración, la implementación y el monitoreo.
Microservicios
Microservices es una arquitectura de software emergente que divide una gran aplicación y servicio en docenas de microservicios compatibles. Una estrategia de microservicio puede facilitar el trabajo, lo que puede escalar un solo componente en lugar de una pila de aplicaciones completa, cumpliendo así con los protocolos de nivel de servicio.
Spring proporciona un conjunto completo de componentes para microservicios: SpringClound, y Spirngboot es la base.
El primer programa Springboot
El software de desarrollo utilizado aquí es IntelliJ Idea, que no es muy diferente de Eclipse, con una interfaz más genial y funciones más potentes; Android Studio se desarrolla en base a IntelliJ. He usado Android Studio antes, y las interfaces de ambos son casi las mismas.
Idea de IntelliJ Sitio web oficial: http://www.jetbrains.com/idea/
Después de configurar Maven, Tomcat, JDK, puede usarlo
La imagen en la nube de Alibaba del almacén central configurada por Maven, la velocidad de descargar paquetes JAR en esta dirección, ¡quién sabe quién lo usa!
setting.xml
.. <Mirrors> <Mirror> <id> alimaven </id> <name> aliyun maven </name> <url> http://maven.aliyun.com/nexus/content/groups/public/ </url> <rirrorof> Central </Mirrorof> </Mirror>. .
Crear proyectos de brote con idea
Versión de mi idea: IDEA INTELIG 2016.3.1
La estructura del proyecto es:
El archivo Maven Pom.xml predeterminado para el proyecto
pom.xml
<? xml versión = "1.0" encoding = "utf-8"?> <Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschemainstance" 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> <grupo> com.jxust </groupid> <Atifactid> SpirngbootDemo </arfactid> <verserse> 0.0.1-snapshot </versewer> <cackaging> jar </packaging> <name> spirngbootdemo </name> <solding> Proyecto de demostración para el arranque de Spring </cription> <Parent> <MoupRid> Org.SpringframeWork.Boot </proupid> <artifactid> Spring-Boot-Starter-Parent </arfactid> <versión> 1.4.2.release </versewer> <relativePath/> <!-Buscar padres desde repositorio-> </rent> <propersies> <proyect.build.sourceEncoding> utf-8 </project.build.sourceodinging <Project.Reporting.outputencoding> UTF-8 </project.rePorting.outputEncoding> <java.version> 1.8 </Java.version> </propieties> <pendencies> <pendency> <proupid> org.springFrame.Boot </groupId> <Atifactid> Spring-Boot-sharterweb </artid-web </artidmwinte <Spendency> <MoupRupid> org.springframework.boot </proupid> <artifactID> spring-boot-starter-test </arfactid> <cope> test </cope> </pendency> </pendencies> <stract> <glugins> <grupo> org.springframework.boot </proupid> <artifactID> spring-boot-saven-plugin </artifactid> </glugin> </glugins> </build> </proyecto>
Ejecute el método principal de SpirngbootDemoAplication y puede comenzar a ejecutar.
Para obtener otros métodos de inicio, consulte el video tutorial http://www.imooc.com/learn/767/
Salida de la consola:
"C:/archivos de programa/java/jdk1.8.0_91/bin/java" ... ____ __ __ /// ___'_ __ __ _ (_) _ ___ ___ / / / / (() / ___ | '_ |' _ | | / / / / / / / / / / / / / / / / | | | | | | | | | | | || (_ |)) '| ____ | ____ | .__ || | _ | | _ | | _/__, | / / / / / / = ==================================== ____ / = / _ / _ / :: Spring Boot :: (V1.4.2.2. startup2016-12-16 14: 56: 52.215 Información 15872 --- [Main] SBCettomCatembedDedServletContainer: Tomcat comenzó en puerto (s): 8080 (http) 2016-12-16 14: 56: 52.255 Información 15872 --- [principal] Sbcetomcatomedservletcontconta Puerto (s): 8080 (HTTP) 2016-12-16 14: 56: 52.255 Información 15872 --- [principal] SbcettomCatembeddedServletContainer: Tomcat comenzó en puerto (s): 8080 (HTTP) 2016-12-16 14: 56: 52.255 Información 15872 --- [principal] sbcettomCatembeddedServletContainer: Tomcat comenzó en el puerto (s): 8080 (http) 2016-12-16 14: 56: 52.255 Info 15872 --- [main] com.jxust.spirngbootdemoapplation: comenzó espirngbootdemoapplication en 7.795 segundos (jvm corriendo por 9.177)
Desde aquí puede ver el número de puerto de Tomcat. Como no hay controlador personalizado, todavía no hay vista. ¡Creemos una vista que salga de Hello Springboot!.
Crea un hellocontroller, ubicado debajo del paquete de controlador
Hellocontroller.java
paquete com.jxust.controller; import org.springframework.web.bind.annotation.getMapping; import org.springframework.web.bind.annotation.restController;/** * creado por Peng * Time: 2016/12/16 15:45 */ @RestControllerPublic de Hellocontroller public String dice () {return "¡Hola Springboot!"; }}@RestController Nueva anotación después de Spring4. Resulta que regresar JSON requiere que @ResponseBody coopere con @Controller. Ahora uno es los dos mejores
Ingrese http: // localhost: 8080/hola en el navegador para emitir la oración ¡Hola Springboot!
Configuración de propiedad personalizada
Se utiliza el archivo Application.Properties
Configurar el número de puerto y el prefijo de acceso
Application.PropertiesServer.port = 8081Server.Context-Path =/SpringBoot
Además de usar archivos de formato .properties, también puede usar archivos de configuración de formato .yml (recomendado), que es más fácil
Application.yml
Elimine el archivo original de aplicación.properties
Presta atención al formato, los espacios no pueden faltar
Obtenga el valor de atributo en el archivo de configuración
También podemos configurar datos en el archivo de configuración y obtenerlos en el controlador, por ejemplo:
Application.yml
Servidor: Puerto: 8081 Context-Path: /SpringBootName: XiaOpang
Hellocontroller obtiene el valor en el archivo de configuración
Hellocontroller.java
.... @RestControllerPublic Class Hellocontroller {@Value ("$ {name}") Nombre de cadena privada; @RequestMapping (valor = "/hola", método = requestmethod.get) public String Says () {return name; }} El valor de nombre devuelto
Diversificación de los métodos de configuración de valor en los archivos de configuración
Los valores del archivo de configuración pueden ser múltiples o combinados, como:
Application.yml
Nombre: XiaOpang Edad: 22 o Nombre: XiaOpang Edad: 22Content: "Nombre: $ {name}, edad: $ {edad}" o servidor: puerto: 8081 context-path: /springbootperson: name: xiaopang edad: 22Las dos primeras configuraciones son la misma forma de obtener valores, pero para este método, la persona tiene dos propiedades correspondientes, que deben manejarse de esta manera.
Personproperties.java
paquete com.jxust; import org.springframework.boot.context.properties.configurationProperties; import org.springframework.stereotype.component;/** * creado por Peng * Tiempo de tiempo 2016/12/16 16:34 */@componente@ConfigurationProperties (prefix = "persona") Class de clase pública Persona de clase privada; edad de entero privado; public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } public Integer GetAge () {return Age; } public void setAge (edad entera) {this.age = edad; }}Alt+Insertar las indicaciones de la tecla de acceso directo para generar Getter y Setter
Pom.xml necesita agregar las siguientes dependencias para manejar las advertencias
<Spendency> <MoupRupid> org.springframework.boot </groupid> <artifactID> spring-boot-configuation-procesador </artifactid> <pectional> true </pectional> </pendency>
Hellocontroller.java
paquete 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.restController;/** * Creado por Peng * Tiempo: 2016/12/15 20:55 */ @RestControllerPublic Class HELLOCONTROLLER {@AUTOWIREDIRDIRED PERSPERTIES PRIVESPERTIES PERSPERTIES; @RequestMapping (valor = "/hola", método = requestmethod.get) public String Says () {return PersonProperties.getName ()+PersonProperties.getage (); }}Acerca del archivo de configuración Application.yml múltiples conjuntos de configuraciones
Similar a la internacionalización de los archivos IL8N, I18N_EN_US.Properties e I18N_ZH_CN.Properties
Esto puede resolver la vergüenza de las modificaciones de configuración frecuentes
Depende del archivo de configuración Application.yml decidir qué archivo de configuración usar.
Application.yml
primavera: perfiles: activo: un
Application-A.yml
Servidor: Puerto: 8081 Path de contexto: /SpringBootperson: Nombre: Xiaoliage: 21
aplicación-b.yml
Servidor: Puerto: 8081 Path de contexto: /SpringBootperson: Nombre: Xiaopang Edad: 22
SpringBoot agrega, elimina y cambia para verificar ejemplos
Estructura completa del proyecto
Uso del controlador
Uso del controlador
@Controller CHU maneja la solicitud HTTP
@RestController Nueva anotación Después de Spring4, resulta que regresar JSON requiere que @ResponseBody coopere con @Controller
@RequestMapping Configurar Mapeo de URL
Solicitudes de estilo de descanso
Para anotaciones en métodos en el controlador
@RequestMapping (valor = "/hola", método = requestmethod.get) @requestmapping (valor = "/hello", método = requestmethod.post) @requestmapping (valor = "/hello", método = requestmethod.delete) @requestmapping (value = "/hello", método = requestmethod.put)
SpringBoot simplifica la anotación anterior
@GetMapping (valor = "/niñas") @PostMapping (valor = "/chicas") @putMapping (valor = "/girls/{id}") @DeletEmapping (value = "/girls/{id}")El navegador necesita enviar solicitudes de diferentes maneras, y puede instalar el complemento HTTPRequester, y el navegador Firefox puede buscar directamente este componente para instalar.
Data-JPA de primavera
JPA Nombre completo Java Persistence Api.jpa describe la relación de mapeo de una tabla de relación de objetos a través de la anotación JDK 5.0 o XML, y persiste los objetos de entidad en ejecución en la base de datos.
Hibernate3.2+, Toplink 10.1.3 y OpenJPA proporcionan implementación JPA.
Crea una base de datos MySQL usando JPA
Pom.xml agrega dependencias JPA y MySQL
<Spendency> <MoupRupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-data-jpa </artifactid> </pepertency> <pendency> <uproupid> mysql </groupid> <arifactid> mysql-connector-java </artifactid> </dependency>
Configuración de JPA y base de datos
Application.yml
Spring: Perfiles: Active: A DataSource: Driver-Class-Name: com.mysql.jdbc.driver url: jdbc: mysql: //127.0.0.1: 3306/db_person Nombre de usuario: Root Password: Root JPA: HiBERNATE: DDL-Auto: Actualización de Show-Sql: Verdadero
El formato es importante
Necesita crear la base de datos DB_person manualmente
Crear una clase de entidad de persona correspondiente a la tabla de datos
Persona.java
paquete com.jxust.entity; import javax.persistence.entity; import javax.persistence.GeneratedValue; import javax.persistence.id;/** * creado por Peng * Time: 2016/12/16 17:56 */ @EntityPublic de clase " nombre de cadena privada; edad de entero privado; // El constructor debe ser público persona () {} public entero getId () {return id; } public void setid (ID de entero) {this.id = id; } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } public Integer GetAge () {return Age; } public void setAge (edad entera) {this.age = edad; }}Después de ejecutar el proyecto, verifique la base de datos y la persona de la tabla se creará automáticamente
mysql> use db_person; base de datos cambiadomysql> DESC persona;+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- | | NULL | |+-----------------
A continuación, puede agregar, eliminar, modificar y verificar la tabla de la persona
Crear controlador PersonController.java
Primero cree una interfaz PersonRepository, ubicada en el paquete DAO. PersonController llama al método heredado de jParepository para lograr la interacción con la base de datos.
La función de esta interfaz PersonRepository es similar a la función de interfaz de la capa DAO en el marco SSM; En el marco SSM, la capa de servicio ejecuta indirectamente las declaraciones SQL correspondientes en el archivo de asignación de base de datos MyBatis (.xml) a través de esta interfaz, y realiza las operaciones de agregar, eliminar, modificar y buscar la base de datos. (Mapper implementa automáticamente la interfaz DAO)
PersonRepository.java
paquete com.jxust.dao; import com.jxust.entity.person; import org.springframework.data.jpa.repository.jparepository;/** * creado por Peng * Time: 2016/12/16 18:07 */Interface PersonRepository extiende jParepository <Persona, INTEGER> {}Personcontroller.java
paquete com.jxust.controller; import com.jxust.dao.personRepository; import com.jxust.entity.person; import org.springframework.beans.factory.annotation.aUtowired; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.restcontroller; import java.util.list;/** * creado por Peng * Time: 2016/12/16 18:04 */ @RestControllerPublic Public ClassController {@AUTOWIREDIREDIRIRIRY PersonRepository; @GetMapping (value = "/persona") Lista privada <OlPER> PersonList () {return PersonRepository.Findall (); }}Agregue dos datos a la base de datos
mysql> select * de persona;+---+-----+------+| ID | Edad | Nombre |+----+-------+-------+| 1 | 23 | Charlotte || 2 | 21 | Ma Dongmei |+----+-------+------+2 filas en el set (0.04 segundos)
Inicie la solicitud de ejecución del proyecto http: // localhost: 8081/springboot/persona
Declaraciones SQL Salida por la consola:
Hibernate: seleccione Person0_.id como ID1_0_, Person0_.age como Age2_0_, Person0_.name como Name3_0_ de Persona0_
Otros métodos para agregar, eliminar, modificar y verificar
Personcontroller.java
..../** * Agregue una persona * * @param nombre * @param edad * @return */@postmapping (valor = "/persona") public Personadd (@RequestParam ("Nombre") Nombre de cadena, @RequestParam ("Age") Integer Age) {persona persona = nueva persona (); persona.setName (nombre); persona.setaje (edad); return PersonRepository.save (persona); }/** * consulta una persona * * @param id * @return */@getmapping (value = "/persona/{id}") persona pública personafindone (@pathvariable ("id") ID entero) {return PersonRepository.Findone (id); }/** * Eliminar una persona * * @param id */@DeletEmapping (value = "/persona/{id}") public void Persondelete (@PathVariable ("ID") ID de Integer) {PersonRepository.Delete (id); }/** * Actualizar a una persona * * @param id * @param nombre * @param edad * @return */@putmapping (valor = "/persona/{id}") PUBLICO PersonaPdate (@PathVariable ("id") ID de entero, @RequestParam ("nombre") Nombre de cadena, @RequestParam ("Age") Integer Age) {Persona de la persona = NEWOLE (); persona.setid (id); persona.setName (nombre); persona.setaje (edad); return PersonRepository.save (persona); }El método de solicitud correspondiente es:
Consulta un usuario:
Agregar un usuario
Eliminar un usuario (sin valor de retorno)
Actualizar a un usuario
Entonces, ¿puedo verificar en función de la edad? La respuesta es que aún no es posible
De las declaraciones de la consola, se puede ver que las declaraciones SQL se consultan en función de ID
Hibernate: Seleccione Person0_.id como ID1_0_0_, Person0_.age como AGE2_0_0_, Person0_.name as name3_0_0_ de Person Person0_ Where Person0_.id =?
Consulta por edad
Agregue un método a PersonRepository FindByage (edad entera)
interfaz pública PersonRepository extiende jParepository <Person, entero> { / ** * Consulta por edad * Nombre del método FindByage * @param Age * @return * / Public List <Oll> FindByage (Age Integer);}Agregar el método de consulta correspondiente a PersonController
..../** * consulta por edad * @param edad * @return */@getmapping (valor = "/persona/edad/{edad}") Lista pública <Oll> PersonlistByage (@PathVariable ("Age") Integer Age) {return PersonRepository.FindByage (edad); }Ingrese la solicitud http: // localhost: 8081/springboot/persona/edad/23 para consultar a la persona con 23 años
La consola emite una instrucción SQL:
Hibernate: seleccione Persona0_.id como ID1_0_, Person0_.age como Age2_0_, Person0_.name as name3_0_ de persona Person0_ Where Person0_.age =?
Gestión de transacciones
Dos declaraciones SQL se ejecutan en un método al mismo tiempo. Para evitar que una declaración SQL se ejecute con éxito y la otra declaración SQL falle, se introduce la gestión de transacciones. @Se requiere la anotación de transacciones transaccional para agregar el método.
Las transacciones aseguran la integridad y consistencia de los datos de la base de datos
Personservice.java
En PersonControll
paquete com.jxust.service; import com.jxust.dao.personRepository; import com.jxust.entity.person; import og.springframework.beans.factory.annotation.aUtowired; import org.springframework.stereotype.service; import javax.transaction.transaction;/** * creado por PEng * creado: creado: creado: creado: 2016/12/16 19:30 */ @ServicePublic Class Personservice {@aUtowired PEOPERROPITORY PEROPOSITORY; / *** Prueba de gestión de transacciones* Dos datos tienen éxito al mismo tiempo, o no tienen éxito al mismo tiempo* Asegurar la integridad y la consistencia de los datos de la base de datos*/ @Transactional Public void InsertTwo () {Persona Persona = New Person (); personalA.SetName ("Qiuya"); Persona.setage (19); PersonRepository.save (Persona); System.out.print (1/0); Persona personab = nueva persona (); Personb.setName ("Mengtejiao"); Personb.setage (25); PersonRepository.save (Personb); }}Prueba en ER
... @aUtowired PERSONES PRIVADO PERSONES SERVICE; .../*** prueba de transacción*/@postmapping ("/persona/dos") public void persontwo () {Personservice.inserttwo (); }Vuelva a ejecutar el proyecto y ejecute el método de publicación de solicitud http: // localhost: 8081/springboot/persona/dos
La primera pieza de datos no se agregó a la base de datos, lo que indica que hay gestión de transacciones
Complete PersonController.java, PersonRepository.Java y Pom.xml
Personcontroller.java
paquete 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;/** * Creado por Peng * Tiempo: 2016/12/16 18:04 */ @RestControllerPublic Class PersonController {@aUtowired PersonRepository PersonRepository; @AUTOWIREDIRD PERSONES PERSONES DE PERSONAS; /** * Consulta la lista de todo el personal * * @return */@getmapping (value = "/persona") Lista privada <OlPER> PersonList () {return PersonRepository.findall (); }/** * Agregue una persona * * @param nombre * @param edad * @return */@postmapping (valor = "/persona") Public PersonAdd (@RequestParam ("Nombre") Nombre de cadena, @RequestParam ("Age") Integer Age) {persona persona = nueva persona (); persona.setName (nombre); persona.setaje (edad); return PersonRepository.save (persona); }/** * consulta una persona * * @param id * @return */@getmapping (value = "/persona/{id}") persona pública personafindone (@pathvariable ("id") ID entero) {return PersonRepository.Findone (id); }/** * Eliminar una persona * * @param id */@DeletEmapping (value = "/persona/{id}") public void Persondelete (@PathVariable ("ID") ID de Integer) {PersonRepository.Delete (id); }/** * Actualizar a una persona * * @param id * @param nombre * @param edad * @return */@putmapping (valor = "/persona/{id}") PUBLICO PersonaPdate (@PathVariable ("id") ID de entero, @RequestParam ("nombre") Nombre de cadena, @RequestParam ("Age") Integer Age) {Persona de la persona = NEWOLE (); persona.setid (id); persona.setName (nombre); persona.setaje (edad); return PersonRepository.save (persona); }/** * consulta por edad * @param edad * @return */@getmapping (valor = "/persona/edad/{edad}") Lista pública <Oll> PersonListByage (@PathVariable ("Age") Integer Age) {return PersonRepository.FindByage (edad); }/*** prueba de transacción*/@postmapping ("/persona/two") public void persontwo () {Personservice.inserttwo (); }}PersonRepository.java
paquete com.jxust.dao; import com.jxust.entity.person; import org.springframework.data.jpa.repository.jparepository; import java.util.list;/** * creado por Peng * Time: 2016/12/16 18:07 */Interface Public Interface PersonRePository extiende la extensión <Persona, intencional, Inter por edad * Nombre del método fijo * @param edad * @return */ lista pública <pente> findyage (edad entera);}
pom.xml
<? xml versión = "1.0" encoding = "utf-8"?> <Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschemainstance" 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> <grupo> com.jxust </groupid> <Atifactid> SpirngbootDemo </arfactid> <verserse> 0.0.1-snapshot </versewer> <cackaging> jar </packaging> <name> spirngbootdemo </name> <solding> Proyecto de demostración para el arranque de Spring </cription> <Parent> <MoupRid> Org.SpringframeWork.Boot </proupid> <artifactid> Spring-Boot-Starter-Parent </arfactid> <versión> 1.4.2.release </versewer> <relativePath/> <!-Buscar padres desde repositorio-> </rent> <propersies> <proyect.build.sourceEncoding> utf-8 </project.build.sourceodinging <Project.Reporting.outputencoding> UTF-8 </project.rePorting.outputEncoding> <java.version> 1.8 </Java.version> </propieties> <pendencies> <pendency> <proupid> org.springFrame.Boot </groupId> <Atifactid> Spring-Boot-sharterweb </artid-web </artidmwinte <Spendency> <MoupRupid> org.springframework.boot </proupid> <artifactID> spring-boot-starter-test </artifactid> <cope> test </scope> </dependency> <ependency> <grupid> org.springframe.boot </groupid> <artifactid> spring-boot-configuration-prospersor </artesfaor </artesfact> <Coptional> true </pectional> </pendency> <pepertency> <MoupRupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-data-jpa </artifactid> </pendency> <pendency> <uproupid> mysql </groupid> <artifactid> mysql-connector-JaVe </arthact> </artact> </artact> </artact> </artact> </artact> </artact> </artifact> </artifact> </artifact> </artifact> </artifact> </artifact> </artifact> </artifact> </artifact> </art. </pendency> </dependence> </stract> <glugins> <glugin> <uproupid> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </arfactid> </glugin> </glugins> </build> </jection>
Resumir
Lo anterior es una explicación detallada de la adición de base de datos SpringBoot de Idea IntellIJ, eliminación, modificación y ejemplos de búsqueda introducidos por el editor. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!