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).
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:
- 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>
- Hay que añadir la conexión a los servidores de Spring:
(Si no se añaden en el
<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>
settins.xml
se pueden añadir en el propiopom.xml
del proyecto). - 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>
- 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. - Añadir al pom.xml:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.1.0</version> </plugin>
Referencias¶
- Udemy - Learn Spring 5, Boot 2, JPA, Thymeleaf, AOP, Web MVC, REST, Imtiaz Ahmad. Udemy
- Balaji Varanasi Sudha Belida - Spring REST
- https://spring.io/