Muchos internautas me preguntarán de vez en cuando, cómo probar el proyecto Spring Boot, cómo implementarlo y si hay buenas soluciones de implementación en la producción. Este artículo presentará cómo Spring Boot se desarrolla, depurará, empaqueta y finalmente se pone en producción y lanzamiento.
Etapa de desarrollo
Prueba unitaria
Lo más importante durante la etapa de desarrollo es la prueba unitaria. El soporte de SpringBoot para las pruebas unitarias se ha perfeccionado.
1. Agregue la referencia del paquete de prueba de arranque de boot de primavera al paquete POM
<Spendency> <ProupId> org.springframework.boot </groupid> <artifactId> spring-boot-starter-test </arfactid> <cope> test </cope> </dependence>
2. Desarrollo y prueba
Tomando el Helloworld más simple como ejemplo, debe agregar: @runwith (SpringRunner.class) y @SpringBoottest Annotations al jefe de clase de la clase de prueba. Simplemente agregue @Test en la parte superior del método de prueba y finalmente haga clic con el botón derecho en el método para ejecutar.
@RunWith (SpringRunner.class) @SpringBoottestPublic AplicationTests {@Test public Void Hello () {System.out.println ("Hello World"); }}En uso real, puede inyectar código de capa DAO o código de capa de servicio de acuerdo con el uso normal del proyecto para la prueba y la verificación. Spring-Boot-Starter-Test proporciona muchos usos básicos, y lo que es aún más raro es que agrega soporte para las pruebas de capas del controlador.
// Verifique simplificando si el conjunto de resultados es correcto afirmar.asStequals (3, usermapper.getAll (). Size ()); // Verifique el conjunto de resultados, indicador afirmar.asserttrue ("Error, el valor de retorno correcto es 200", status == 200); Afirmar.assertfalse ("Error, el valor de retorno correcto es 200", estado! = 200);MockMVC se introduce para admitir las pruebas de la capa del controlador. El ejemplo simple es el siguiente:
clase pública HELOCONTROLTESTS {private MockMVC MVC; // Inicializar la ejecución @bebore public void setup () lanza la excepción {mvc = mockmvcbuilders.standalonesetup (new Hellocontroller ()). Build (); } // Verifique si el controlador responde normalmente e imprime el resultado de retorno @test public void gethello () lanza la excepción {mvc.perform (mockmvCrequestBuilders.get ("/hello"). Acepter (Mediatype.Application_JSON)) .AndExpect (MockMvCresultMatchers.status (). ISOK ())) .AndDo (MockMVCresulThandlers.print ()) .andreturn (); } // Verifique si el controlador responde normalmente y determina si el resultado de retorno es correcto @test public void testHello () lanza la excepción {mvc.perform (mockmvCrequestBuilders.get ("/hello"). Acept (Mediatype.Aplication_JSON)) .Anstaxpect (status (). ISOK ()) .andexpect (content (). String (igualto ("hola"). Aceptar (Mediatype.application_json)) .andexpect (status (). Isok ()) .andexpect (content (). string (igualto ("hola world"));}}La prueba unitaria es la primera barrera para verificar su código. Debe desarrollar el hábito de las pruebas unitarias cada vez que escribe una parte de su código. No espere hasta que todos se integren antes de la prueba. Después de la integración, es fácil perder los errores en la parte inferior del código porque presta más atención al efecto de operación general.
Prueba de integración
Después de completar el desarrollo general, se ingresa la prueba de integración. La entrada de inicio del proyecto Spring Boot está en la clase de aplicación. Puede iniciar el proyecto ejecutando el método Ejecutar directamente. Sin embargo, durante el proceso de depuración, debemos depurar constantemente el código. Si necesita reiniciar manualmente el servicio cada vez que se modifique el código, será muy problemático. Spring Boot proporciona soporte de implementación en caliente de manera muy considerable, lo cual es muy conveniente para la depuración y el uso en proyectos web.
POM necesita agregar la siguiente configuración:
<Spendencies> <Spendency> <MoupRId> org.springframework.boot </groupid> <artifactid> spring-boot-devlools </artifactid> <spectional> true </pectional> </pendency> </pendencies> <1t build> <glugins> <proupid> org.springframework.boot </proupid> <artifactID> spring-boot-saven-plugin </artifactid> <figuration> <cutk> true </ftor> </figuration> </glugin> </glugins> </build>
Después de agregar la configuración anterior, el proyecto admite la implementación de Hot, que es muy conveniente para las pruebas de integración.
Ir de producción y en línea
En realidad, creo que esta etapa debería ser relativamente simple y generalmente dividida en dos tipos: uno es empaquetarlo en un paquete JAR y ejecutarlo directamente, y la otra es empaquetarlo en un paquete de guerra y colocarlo debajo del servidor Tomcat.
Conviértalo en un paquete de jar
Si está utilizando Maven para administrar su proyecto, ejecute el siguiente comando
Proyecto de CD y directorio (mismo nivel que Pom.xml) MVN Clean Paquete ## o ejecute el siguiente comando ## para excluir el código de prueba y el paquete MVN Clean Package -dmaven.test.skip = True
Después de completar el empaque, el paquete JAR se generará en el directorio de destino. El nombre suele ser el nombre del proyecto + número de versión.jar
Iniciar el comando del paquete jar
Java -jar Target/Spring-Boot-Scheduler-1.0.0.Jar
De esta manera, mientras la consola esté cerrada, el servicio no será accesible. Comencemos lo siguiente ejecutando en segundo plano:
Nohup Java -jar Target/Spring-Boot-Scheduler-1.0.0.jar &
También puede elegir leer diferentes archivos de configuración al comenzar
java -jar app.jar --spring.profiles.active = dev
También puede establecer parámetros JVM al inicio
java -xms10m -xmx80m -jar app.jar & gradle
Si está utilizando Gradle, use el siguiente comando para empaquetar
Gradle BuildJava -jar Build/Libs/MyModule-0.0.1-Snapshot.jar
Conviértalo en una bolsa de guerra
El primer tipo se puede utilizar para exportar el paquete de guerra a través del eclipse de la herramienta de desarrollo, y el otro tipo es usar comandos para completarlo. Aquí presentamos principalmente el último.
1. Proyecto Maven, modifique el paquete POM
Voluntad
<Actaging> jar </packaging>
Cambiar
<Artaging> war </packaging>
2. Excluya Tomcat al empaquetar.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope></dependency>
Aquí, establezca la propiedad de alcance proporcionada para que el paquete JAR no se incluya en la guerra final, porque servidores como Tomcat o Jetty proporcionarán clases de API relevantes en tiempo de ejecución.
3. Registre la clase de inicio
Crear servletinitializer.java, heredar springbootservletinitializer, anular configure () y registrar la aplicación de clase de inicio. Cuando un servidor de aplicaciones web externos construye un contexto de aplicación web, se agregará la clase de inicio.
ServletInitializer de clase pública extiende SpringBootServletInitializer {@Override SpringApplicationBuilder Configure (SpringApplicationBuilder Application) {return Application.sources (Application.Class); }}Ejecución final
MVN Clean Package -dmaven.test.skip = True
El nombre del nombre del proyecto + versión. El archivo de guerra se generará en el directorio de destino y lo copiará en el servidor Tomcat para que se inicie.
graduarse
Si está utilizando Gradle, el paso básico es el mismo. Agregue el soporte de guerra en Build.gradle y excluya a Spring-Boot-Starter-Tomcat:
... Aplicar complemento: 'War' ... dependencias {compile ("org.springframework.boot: spring-boot-starter-web: 1.4.2.release") {excluir mymodule: "spring-boot-starter-Tomcat"}} ...Use el comando de compilación nuevamente
Gradle Build
La guerra se generará en el directorio Build/Libs.
Operación de producción y mantenimiento
Ver el valor de los parámetros JVM
Puedes seguir el comando jinfo que viene con Java:
jinfo -flags pid
Veamos qué se usa GC después de que se inicia el frasco, cuánta memoria hay en lotes en la nueva generación y los ancianos. Los ejemplos son los siguientes:
-Xx: cicompilercount = 3 -xx: inicialHeapSize = 234881024 -xx: maxheapsize = 3743416320 -xx: maxnewsize = 1247805440 -xx: minheapDeltabytes = 524288 -xx: newsize = 78118912 -xx -Xx:+useCompisEdClassPoInters -xx:+useCompisEdops -xx:+UseFastUnderLorderedtimeStamps -xx:+UseParallelgc -xx: cicompilercount: Compilas paralelas máximas -xx: inicialHapsize y -xx: maxHeapSiz -Xx: MaxNeWSize: tamaño máximo asignable para la nueva generación de memoria en el área de montón JVM ... -xx:+UseParallelgc: la recolección de basura utiliza recolector paralelo
Cómo reiniciar
Simple y crudo
Mata directamente el proceso y comience el paquete jar nuevamente
PS -EF | Grep Java ## Obtenga el programa Pidkill para Java -9 Pid ## reiniciar Java nuevamente -jar xxxx.jar
Por supuesto, este método es más tradicional y violento, por lo que se recomienda que utilice el siguiente método para administrarlo
Ejecución de script
Si está utilizando Maven, debe incluir la siguiente configuración
<glugin> <grupoD> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactid> <necuteation> <secutable> true </ececable> </figuration> </glugin>
Si usa Gradle, debe incluir la siguiente configuración
SpringBoot {ejecute = true}Método de inicio:
1. Puedes comenzar directamente en ./yourapp.jar
2. Regístrese como servicio
También puede hacer un enlace suave para señalar su paquete JAR y agregarlo a init.d, y luego comenzar con comandos.
Init.d Ejemplo:
ln -s /var/yourapp/yourapp.jar /etc/init.d/yourappchmod +x /etc/init.d/yourapp
De esta manera, puede usar el comando STOP o Reiniciar para administrar su aplicación.
/etc/init.d/yourapp inicio | parar | reiniciar
o
SERVICIO TUAPAP COMIENCE | Detener | Reiniciar
En este punto, se ha introducido la prueba, la coordinación conjunta y el empaque de los proyectos Springboot. Puede encontrar tiempo para estudiar la operación automatizada y el mantenimiento de Springboot y la combinación de Springboot y Docker.
Código de muestra - Github
Muestra de nube de código de código
Resumir
Lo anterior es el método del empaque e implementación de la prueba de arranque de primavera presentados por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!