Salta el contingut

Spring Boot Què és i com funciona?

Spring Boot és una de les tecnologies dins del món de Spring de les que més es fa servir actualment .¿Què és i com funciona Spring Boot? . Per entendre el concepte primer hem de reflexionar sobre com construïm aplicacions amb Spring Framework antigament.

Primeres passes sense Spring Boot

entradaSpringBoot

Fonamentalment existien tres passes a realitzar. El primer és crear un projecte Maven/Gradle i descarregar les dependències necessàries. En segon lloc hi ha el procés de crear l'aplicació, però per això ens agradi o no hem d'abordar un procés ampli de configuració de l'aplicació, amb fitxers XML o anotacions i configuracions molt especifiques que moltes vegades només un expert era capaç d'abordar amb garanties. Finalment hauríem de desplegar-la en un servidor.

Problemes

Si ens posem a pensar una mica a detall en el tema, únicament la passa número dos és una tasca de desenvolupament i dins d'aquesta tasca 2 fins i tot la part de configuració no està clar que sigui desenvolupament en si. Són coses que estan més orientats a infraestructura que al desenvolupament en si mateix.

No hauríem d'estar triant contínuament les dependències i el servidor de desplegament així com realitzar una configuració inicial. Això és un tema només per a experts i que aporta realment poc hauria de ser automatic.

Spring Boot

SpringBoot neix amb la intenció de simplificar els passos 1 i 3. Simplificar la configuració, que ens puguem centrar en el desenvolupament de la nostra aplicació. Com funciona?. L'enfocament és senzill i ho entendrem realitzant un exemple. Per això anem a connectar-nos a l'assistent de Boot que es denomina Spring Initializer.

String Boot Starter y simplificaciones

L'assistent és intuïtiu, elegim el package al qual volem que les nostres classes pertanyin, elegim el nom del projecte i per últim les dependències. Això sí que ja no es tracta de triar JAR per JAR sinó per tipus d'aplicació que necessitem a aquest concepte se l'anomena Spring Starter. Per tant en comptes d'haver de triar 10 o 20 dependències és molt més còmode triar 2 starters i Spring Boot s'encarrega de la resta.

Starters i avantatges

L'avantatge és abismal ja que no només redueixo les dependències sinó també els temes a configurar ja que els starter poden encarregar-se d'afegir carpetes etc.

Construint l'aplicació

En aquest cas vaig a construir una aplicació Spring MVC i trio la dependència web o Starter Web. Posem generar projecte i ens descarregarà un projecte Maven en format zip. Descomprimim el projecte i aquest és el seu contingut.

Una aplicació de Spring amb estructura Maven totalment configurada i carpetes addicionals per cobrir les nostres necessitats. El següent pas importar aquesta aplicació al nostre IDE (IntelliJ al nostre cas). Anam a veure el contingut de la classe DemoApplication.

package edu.xaviersastre.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
}

Aquesta classe és l'encarregada d'arrencar la nostra aplicació de Spring a diferència d'un enfocament clàssic no cal desplegar-la en un servidor web ja que Spring Boot proveeix d'un (conté un Tomcat incrustat)

Spring Boot Controller

Anam a construir un controlador de Demo molt senzill:

package edu.xaviersastre.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}
Aquest controlador registra la url de / perquè ens retorni “Hola Món”. És moment d'executar la nostra aplicació, directament des d'IntelliJ o amb mvn. Si obrim un navegador i accedim a la url per defecte del tomcat incrustat http://localhost:8080 veurem quelcom semblant a això.

Aquesta és la manera com estam executant el nostre codi des d'IntelliJ

SpringBoot ens ha simplificat tota l'operativa a l'hora de construir l'aplicació pràcticament no hem hagut de seleccionar dependències de Spring i no ha fet falta definir cap servidor Tomcat en el nostre entorn de desenvolupament ja que Spring Boot en porta un integrat.

Spring Boot Tomcat i Docker

Perquè Spring Boot porta integrat Tomcat?. Molt senzill perquè a partir d'ara els desplegaments no es realitzaran a Servidors Web Standard que emmagatzemen desenes d'aplicacions sinó que cadascuna de les aplicacions es desplegarà en un contenidor Docker completament aïllada de la resta i independent. El contenidor necessita que l'aplicació sigui completament operativa per si sola.

Spring Boot WAR

Si el teu problema és que ara per ara no tens contenidors Docker ni tens Kubernetes entre les teves eines de desplegament, no hi ha problema. Pots seguir usant Spring Boot i desplegar-lo en un entorn de Tomcat o JBoss directament simplement modificant l'inici i fent que la nostra aplicació en comptes de desplegar-se com a JAR es desplegui com a WAR.

En aquest cas s'haurà d'afegir una classe que es cuida d'integrar el projecte amb Tomcat de forma transparent:

package edu.xaviersastre.demo;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DemoApplication.class);
    }

}