56
@josebovet Overview #javaTalksChile 29/08/16

Springboot Overview

Embed Size (px)

Citation preview

Page 1: Springboot  Overview

@josebovet

Overview#javaTalksChile

29/08/16

Page 2: Springboot  Overview

Agenda:• Que es SpringBoot • Objetivo • Características • Instalación • Starters • Testing • Desarrollo Web • Actuator • Empaquetamiento • Consola

Page 3: Springboot  Overview

QUE ES SPRINGBOOT

Page 4: Springboot  Overview

QUE ES SPRINGBOOT?

▸ Proyecto de la plataforma/ecosistema Spring.

▸ Objetivo es simplificar, acelerar y facilitar el desarrollo de aplicaciones.

▸ Permite crear tanto aplicaciones web, como stand-alone.

Page 5: Springboot  Overview

OBJETIVO SPRING

Page 6: Springboot  Overview
Page 7: Springboot  Overview

DISPONER DE FUNCIONALIDAD OUT-OF-BOX EN FUNCIÓN DE LA NATURALEZA DEL PROYECTO.

Page 8: Springboot  Overview

NOS PROVEE UN ÚNICO PUNTO DE ENFOQUE (EN OPOSICIÓN A LA GRAN COLECCIÓN DE PROYECTOS DE SPRING-*)

Page 9: Springboot  Overview

DISEÑADO PARA QUE PUEDA PONERSE EN FUNCIONAMIENTO TAN PRONTO COMO SEA POSIBLE.

$gradle bootRun $gradle package $java -jar libs/app.jar

Page 10: Springboot  Overview

PROVEE HERRAMIENTAS QUE PERMITEN MONITOREAR Y AUDITAR NUESTRAS APLICACIONES.

Page 11: Springboot  Overview

PROPORCIONA UNA GAMA DE CARACTERÍSTICAS NO FUNCIONALES COMUNES A PROYECTOS.

Contenedor Servlets

Seguridad Acceso a datosPersistenciaMétricas, Controles de salud

Manejo de SesionesExternalizar

configuración

Page 12: Springboot  Overview

CARACTERÍSTICAS

Page 13: Springboot  Overview

PROVEE SERVIDORES WEB EMBEBIDOS, COMO TOMCAT, JETTY O UNDERTOW DIRECTAMENTE (SIN NECESIDAD DE DESPLEGAR ARCHIVOS WAR).

Page 14: Springboot  Overview

JAR SOBRE WAR…

Filosofía

Page 15: Springboot  Overview

SIMPLIFICA LA CONFIGURACIÓN Y DEPENDENCIAS MEDIANTE:

Page 16: Springboot  Overview

AGRUPAR DEPENDENCIAS CLASIFICADAS POR TIPOS(FUNCIONALIDAD)

Page 17: Springboot  Overview
Page 18: Springboot  Overview

Menos XML

Más Java Config

Page 19: Springboot  Overview

COMO UTILIZARLO

Page 20: Springboot  Overview

REQUISITOS.

▸ Se puede usar tanto en Gradle 1.12+ como Maven 3.2+ ▸ ** Usaremos Gradle para la presentación**

▸ Por defecto Spring Boot 1.4.0 requiere >= Java 7

▸ Spring Framework 4.3.3 o superior.

▸ Editores Eclipse, IntelliJ, Netbeans.

Page 21: Springboot  Overview

INSTALACIÓN SPRING BOOT-CLI.

▸ posh-gem basado en PowerShell para Windows.

▸ SDKMan! para Linux/OSX. ▸ sdk install springboot ▸ spring -version ▸ Spring CLI v1.4.0.RELEASE

▸ spring run app.java

http://sdkman.io

Page 22: Springboot  Overview

EJEMPLO EXPRESS SPRING BOOT CLI

Aplicación web muy simple que se puede utilizar para probar la instalación.

Crear un archivo llamado app.groovy:

Page 23: Springboot  Overview

EJECUTANDO LA APLICACIÓN DESDE EL CLIENTE

springrunapp.groovy

Abrimos la dirección

Page 24: Springboot  Overview

Y AHORA QUE?

Page 25: Springboot  Overview

http://start.spring.io

Page 26: Springboot  Overview

GENERAMOS NUESTRO PROYECTO CON SUS DEPENDENCIAS.

y hay mas!

Page 27: Springboot  Overview

ANALIZANDO SPRINGBOOT

directorio con los fuentes.

directorio para test

recursos

archivo de construcción y dependencias

SpringBootApplication

JUnitTest -SpringBootTest

Propiedades de la aplicación

Page 28: Springboot  Overview

JAVATALKSAPPLICATION.CLASS

La clase SpringApplication es la encargada de arrancar(método run ) la aplicación mediante la instancia y carga del contexto adecuado.

Por defecto se cargan 2 contextos:• AnnotationConfigApplicationContext• AnnotationConfigEmbeddedWebApplicationContext(si fuese

o no una app web)

Page 29: Springboot  Overview

@SPRINGBOOTAPPLICATION

La anotación @SpringBootApplication es equivalente a usar.@Configuration@EnableAutoConfiguration y@ComponentScan

Equivalentes

Page 30: Springboot  Overview

@SPRINGBOOTAPPLICATION

@ConfigurationAnotación de Spring para marcar una clase como de configuración.

@EnableAutoConfiguration Esta anotación indica a Spring Boot que intente configurar Spring, en base a las dependencias declaradas en los jars que han agregado.

@ComponentScanPermite a Spring buscar componentes marcados en este u otros paquetes.(basePackage)

Page 31: Springboot  Overview

TESTING

Page 32: Springboot  Overview

TESTING CON SPRING-TEST(Y MVC)• spring-boot-starter-test provee dependencias útiles de

pruebas.• JUnit• spring-test• Mockito, • Hamcrest • Spock• AssertJ

• @SpringApplicationConfiguration como alternativa a @ContextConfiguration para implementar las características de Spring Boot

Page 33: Springboot  Overview

TESTING APLICACIONES WEB

Page 34: Springboot  Overview

TESTING APLICACIONES WEB

• Soporte de RestTemplate para testear Rest mediante TestRestTemplate

• Permite levantar un contexto web,definiendo un puerto random con webEnvironment=WebEnvironment.RANDOM_PORT)

Puerto AleatorioSoporte RestTemplate

Soporte de Asserts!

Page 35: Springboot  Overview

TESTING MOCK

• Cuando se inyecta un campo, la instancia del mock también es inyectada

• Soporte de Mocito mediante @MockBean , se puede utilizar para simular un bean dentro del Application Context.

• Los mocks son restablecidos después de la ejecución cada método del test.

Soporte Mockito

Page 36: Springboot  Overview

TESTING MVC

@WebMvcTest autoconfigura la infraestructura para SpringMVC y se limita a escanear los siguientes beans.

• @Controller@ControllerAdvice, @JsonComponent• Filter, WebMvcConfigurer y HandlerMethodArgumentResolver

* @Component no son escaneados cuando se ocupa esta anotación.

Una buena práctica, es limitar a un controlador por test, y combinarlo con un @MockBean para proveer una implementación para los componentes colaboradores.

Un controlador

Provee el soporte para testar MVC, es el punto de entrada para el lado

del servidor.

Page 37: Springboot  Overview

DESARROLLO WEB

Page 38: Springboot  Overview

DESARROLLO APLICACIONES WEB

• Spring Boot esta diseñado para que pueda ponerse en funcionamiento tan pronto como sea posible, arrancar aplicaciones de manera fácil y rápida.

• Incluye un servidores embebidos, lo que permite levantar rápido una aplicación con todas las características web.

• Todo el soporte para trabajar con MVC.• Resolvedores de vistas.• Soporte recursos estáticos• Templates Engines.• Manejo de sesiones.• Soporte Internacionalización• Acceso a datos• Soporte para crear sitios RESTful.• Seguridad y control de acceso.

Page 39: Springboot  Overview

WEB TEMPLATES ENGINES

ENGINES SOPORTADOS POR LA AUTO-CONFIGURACIÓN

 Groovy Markup Templates

Deprecado con Spring 4.3

Page 40: Springboot  Overview

SERVIDORES EMBEBIDOS• Ofrece contenedores de servlets por defecto como

Tomcat y Jetty.

• Permite customizar el contenedor mediante las propiedades de la clase ServerProperties.java

Puerto Especifico!

Contexto y nombre de la aplicación

Page 41: Springboot  Overview

CUSTOMIZACIÓN PROGRAMÁTICA

Se puede customizar mediante la clase EmbeddedServletContainerFactory o implementando la Interfaz EmbeddedServletContainerCustomizer

Puerto Especifico!

También se pueden customizar las propiedades de un contenedor especifico del contenido como server.tomcat.*

Page 42: Springboot  Overview

AGREGANDO RECURSOS ESTÁTICOS.• Fáciles de usar: classpath:/static/** • Variadas alternativas:

• classpath:/public/** • classpath:/resources/** • classpath:/META_INF/resources/** • classpath:/resources/templates/**

Page 43: Springboot  Overview

DEBUG.LOG(“LOGGING”);

Page 44: Springboot  Overview

LOGGING• Provee archivos configuración por defecto para 4 frameworks.

1. Logback 2. Log4j 3. Log4j2 4. java.util.Logging

• Starters con Logback proveen una salida en colores.• INFO es el nivel por defecto.

• DEBUG se puede agregar usando la opción —debug

• Los niveles del log pueden ser customizados mediante la configuración • logging.level.cl.javatalks=TRACE

Page 45: Springboot  Overview

LOGGING

• Mediante el archivo application.properties se pueden definir niveles del log.

• Según la implementación, se pueden personalizar las trazas definiendo el archivo de configuración para cada uno de ellos.

• Logback : logback.xml• Log4j : log4j.properties ó log4j.xml• Java Util Logging: logging.properties

Page 46: Springboot  Overview

AGREGANDO COMPONENTES Y COMPORTAMIENTOS AUTO-CONFIGURABLES.

http://start.spring.io

Page 47: Springboot  Overview

ACTUATOR AGREGANDO FEATURES PARA PRODUCCIÓN

Page 48: Springboot  Overview

ES LA MANERA MAS SIMPLE DE AGREGAR FUNCIONALIDADES PARA MONITOREAR LA SALUD DE NUESTRA APLICACIÓN.

EsAgrega características no funcionales comunes para la aplicación, las expone

mediante endpoint para interactuar con ellas.(REST/JMX)

Page 49: Springboot  Overview

AGREGANDO ACTUATOR

• Añade a nuestros proyectos una serie de endPoints para consultar y monitorear la aplicación.

maven

gradle

• Se puede agregar seguridad a los endpoints.

Page 50: Springboot  Overview

ENDPOINT DISPONIBLES

Page 51: Springboot  Overview

EMPAQUETAMIENTO

Page 52: Springboot  Overview

WAR• Permite genera war ejecutables.

• java -jar app.war • Soporte para generar un war en un contenedor “normal”, para eso

necesitamos extender SpringBootServletInitializer en vez de la clase SpringApplication

Page 53: Springboot  Overview

JAR• Permite generar jars ejecutables, estos contienen las dependencias generadas

conocidos como “Fat Jars”.

• gradle build // gradle jar • java -jar build/libs/java-talks-0.0.1-SNAPSHOT.jar

Page 54: Springboot  Overview

DEPLOY EN LA NUBE

Page 55: Springboot  Overview

#graci@s

Page 56: Springboot  Overview

Preguntas