Saltar a contenido

Spring

Introducción

La idea principal en el desarrollo del framework Spring es simplificar el trabajo del desarrollador.

Se ha convertido en un estándar de facto para construir aplicaciones Java empresariales.

Spring Boot es un componente del framework Spring que permite comenzar el desarrollo de una aplicación en minutos. Se basa en Convención sobre configuración (CoC).

Módulos Spring

Inyección de dependencias

En el corazón del framework Spring se encuentra la inyección de dependencias (DI).

Spring REST

Para desarrollar servicios Rest con Spring se utiliza el módulo Spring Web, también junto a este módulo se suelen usar Spring Data, Spring Security y Spring Boot.

Spring REST Controller no está pensado para interpretar páginas web, sino para enviar y recibir datos, diseñando RESTful APIs.

Se puede utilizar un framework Javascript, como Angular, para invocar a la aplicación llamando a los endpoints del API REST y así consumir datos.

💡 Consejo de buen diseño

  • En las urls de los endpoints no se deberían tener verbos, solo nombres.
  • Siempre hay que usar minúsculas. Nunca usar guiones bajos para separar palabras, usar guiones normales.

Aplicaciones para probar REST


Recetas

Despliegue

Para generar un war hay que añadir en el pom.xml:

<packaging>war</packaging>

También hay que comprobar que esté la dependencia de tomcat:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

y para que no añada la versión en el nombre de la aplicación:

<build>
    <finalName>${artifactId}</finalName>
[...]

Se añade la clase ServletInitalizer (si se elige al crear el proyecto que genere war la crea):

package net.rhernando.gp;

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(GestorProyectosApplication.class);
    }

}

Por último para desplegarlo en un servidor con más aplicaciones es necesario indicar el context-path en el fichero application.properties mediante la variable server.servlet.context-path

Y después hacer Run as > Maven install.

Errores

Problema con maven

El pom.xml está marcado como erróneo y da el siguiente error al ejecutar un maven clean o maven install:

Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project gestorProyectos: Input length = 1 -> [Help 1]

Este error se produce porque maven no es capaz de conectarse a los repositorios de Spring. Para resolver este problema hay que configurar en $HOME/.m2/settings.xml lo siguiente:

  1. La conexión a todos los repositorios tiene que ser por https (ahora maven no acepta las conexiones no seguras):
    <url>https://repo1.maven.org/maven2</url>
    
  2. Hay que añadir la conexión a los servidores de Spring:
    <repository>
        <id>spring-snapshots</id>
        <url>https://repo.spring.io/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository> 
    <repository>
        <id>spring-milestones</id>
        <url>https://repo.spring.io/milestone</url>
    </repository>   
    [...]
    </pluginRepository>
            <pluginRepository>
        <id>spring-snapshots</id>
        <url>https://repo.spring.io/snapshot</url>
    </pluginRepository>
    <pluginRepository>
        <id>spring-milestones</id>
        <url>https://repo.spring.io/milestone</url>
    </pluginRepository>
    
    (Si no se añaden en el settins.xml se pueden añadir en el propio pom.xml del proyecto).
  3. El proxy tiene que estar configurado correctamente:
    <proxy>
      <id>jcyl</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>hervelro</username>
      <host>proxy.jcyl.es</host>
      <port>80</port>
      <nonProxyHosts>http://despliegues.ae.jcyl.es/artifactory/jcyl-repos</nonProxyHosts>
    </proxy>
    
  4. Es muy importante añadir la etiqueta <password> con la contraseña del directorio activo, sino las conexiones a los repositorios irán muy lentas y en algunos casos darán timeout.
  5. Añadir al pom.xml:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.1.0</version>
    </plugin>   
    

Referencias


Última actualización: August 18, 2023