TEMA 8
Java y Spring Framework
Satisfacción
ÍNDICE
1. Java
2. Spring Framework
1. Ventajas
2. Inversión de control – IoC
3. Beans y módulos principales: Boot, Data
4. Creación de aplicaciones con Spring
1. Spring Intializr
2. Implementación de una API básica
5. Spring Cloud Netflix Eureka
6. Spring Cloud Gateway
7. Despliegues en local mediante Docker
8. Despliegues en entornos reales
Software
Recomendado
Software Recomendado
17 17
Versión Latest Versión Ultimate
Registro de estudiante en UNIR
5
1/
El lenguaje Java
El lenguaje Java
Java…
• Lenguaje propiedad de Oracle desde 2010.
• Uno de los más usados hoy en día para el desarrollo de aplicaciones en el sector
empresarial, principalmente en el lado servidor.
• Orientado a objetos (herencia, abstracción, polimorfismo…)
• Su ventaja principal es su ejecución sobre el JRE (Java Runtime Environment).
• Es un lenguaje fuertemente tipado, en contraste con JavaScript.
• Usaremos Java 17 (también es válido Open JDK 17).
7
El lenguaje Java
Documentación oficial…
• Programa principal de Java.
• Operadores.
• If-Else.
• Switch.
• Bucles.
• While
• For
• For-each
• Expresiones Lambda. Optional (inspirado en Haskell).
• Herencia. Polimorfismo. Abstracción. Interfaces. Streams.
8
2/
Spring Framework
Spring Framework
¿Qué es?
• Se trata de un framework de código abierto para Java, orientado al desarrollo de
aplicaciones empresariales.
• La principal ventaja de Spring es la simplicidad en el desarrollo y despliegue de la
aplicación, así como su integración con 3ps.
• Tradicionalmente, usando un servidor web, era necesario un paquete de despliegue
(WAR por ejemplo) mientras que los JAR generados con Spring embeben un
servidor de aplicaciones.
• Usaremos las versiones latest de Spring.
10
Spring Framework
¿Qué es?
11
Spring Framework
¿Qué es?
• Core: Los elementos principales del framework.
Beans y contexto.
• Web: Nos permite exponer una API REST en una
aplicación para que pueda ser integrada por otras.
• Data: Facilita la integración con diferentes orígenes
de datos. Usaremos la interfaz JPA para definir
repositorios de acceso a datos.
12
Spring Framework
¿Qué es un Bean?
• Se trata de un objeto Java normal y corriente gestionado por Spring.
• Lo indicamos a través de anotaciones:
• @Component, @Bean, @Service, @Controller, @Repository…
• Trabajamos con los beans a través del contexto de Spring. En algunos casos de
forma explícita y en otros de forma implícita.
13
Spring Framework
¿Qué es un Bean?
• Podemos definirlos de dos formas.
• Mediante XML. Muy old-style… Nos olvidamos de esto.
• Mediante POJOs en Java. Nuestra opción.
• Mediante clases de configuración. Nuestra opción.
14
Spring Framework
¿Qué es el Scope de un Bean?
• Singleton: Es el scope por defecto, si no indicamos nada. Se crea una única
instancia compartida en el contenedor de IoC de Spring. Cuidado con el estado…
• Prototype: Indica que se debe construir una nueva instancia del objeto Java
referenciado en cada petición al contenedor. Cuidado con el estado…
• Request: Aplica únicamente a aplicaciones web. Se crea una instancia por cada
petición HTTP.
• Session: Aplica únicamente a aplicaciones web. Se crea una instancia por cada
sesión HTTP.
• Hay más… Application y WebSocket. Más información.
15
Spring Framework
IoC – Inversión de Control
• Inyección de dependencias: Es una de las características principales de Spring.
Ayuda en la configuración y reutilización. También se denomina inversión de
control.
• Puede darse de diferentes formas. Nosotros la usaremos, principalmente:
• A nivel de constructor.
• A nivel de atributo.
• A nivel de interfaz. Puedes encontrarla en el código de apoyo.
• Más información
16
Spring Framework
Inyección por constructor
• Se define en el constructor de la clase Java anotada como Bean. Todos los atributos
son tratados como Beans que deben existir en el contexto de Spring.
• Más información
17
Spring Framework
Inyección por atributo
• Se define en el constructor de la clase Java anotada como Bean. Spring solo tomará
ese atributo como dependencia, que deberá estar presente en el contexto de
Spring.
• Más información
18
Spring Framework
Inyección por constructor
• Se define en el constructor de la clase Java anotada como Bean. Todos los atributos
son tratados como Beans que deben existir en el contexto de Spring.
• Más información
19
Spring Framework
Spring Boot
• Se trata de uno de los módulos principales de Spring, que usaremos en todas
nuestras aplicaciones desarrolladas con este framework.
• Embebe un servidor de aplicaciones Tomcat, Jetty o Undertow en el JAR de la
aplicación, por lo que el paquete de despliegue es totalmente autocontenido y solo
precisa del JRE instalado para poder ejecutarse.
• Elimina dependencias con ficheros XML y facilita la integración con algunos
software de terceros a través de starters, como por ejemplo:
• Spring-boot-starter-activemq
• Spring-boot-starter-jdbc
• Spring-boot-starter-redis
• Spring-boot-starter-actuator (¡nos da Health Checks!)
20
Demo Time
Basics con Spring
Recursos Audiovisuales Importantes
08.05 a 08.07
Repaso de Spring Intializr
Ejemplo de Scopes de Spring
Conexión de App Spring + MySQL
22
¿DUDAS?
HANDS ON!
Ejercicios a tutiplén…
Documentación con Swagger
Usaremos Swagger para elaborar
la documentación de una API.
Profundizando en H2
Estudiaremos un poco más en
detalle alguna característica
de H2
Implementación de Mensajería asíncrona Traducción de peticiones
GIT API Calculadora Trabajaremos con ActiveMQ Usaremos los filtros de CW para
para estudiar el patrón editor transformar peticiones POST en
Actualiza tu Fork. Las suscriptor y la mensajería GET, POST, PUT, PATCH, DELETE…
Implementaremos la API
instrucciones de este asíncrona mediante colas y
REST definida en el Tema 6
ejercicio se encuentran topics.
para la calculadora
en la carpeta Tema_8.
25
Gracias
Spring Framework
Spring Cloud Netflix Eureka
• Uno de los componentes principales de Spring-Cloud. Nos permite implementar
Service Discovery en nuestra arquitectura de microservicios.
• Tendremos 1 servidor y N clientes.
• Los clientes enviarán continuamente heartbets.
• Oculta la localización física de los microservicios.
• Podemos hacer peticiones sin conocer IP ni puerto.
• Incluye un balanceador de carga (Netflix Ribbon) que funciona en modo Round
Robin.
• Es posible modificar esto haciendo uso de Spring Cloud Load Balancer con
configuraciones propias (no lo cubrimos).
27
Spring Framework
Spring Cloud Gateway
• Uno de los componentes principales de Spring-Cloud. Nos permite implementar un
servidor perimetral o reverse proxy en nuestra arquitectura de microservicios.
• Es el punto único de entrada al Back-End.
• Se oculta el detalle de como es toda la arquitectura en el lado servidor.
• Puede actuar como Anti Corruption Layer (POST Only vs REST).
28
Spring Framework
Y al final… esto es lo que tenemos
29
Demo Time
Eureka + Cloud Gateway
Recursos Audiovisuales Importantes
08.08 a 08.10
Configurar Eureka
Peticiones con nombre (sin IP ni puerto)
Spring Cloud Gateway sencillo
31
¿DUDAS?
HANDS ON!
Ejercicios a tutiplén…
Documentación con Swagger
Usaremos Swagger para elaborar
la documentación de una API.
Profundizando en H2
Estudiaremos un poco más en
detalle alguna característica
de H2
Implementación de Mensajería asíncrona Traducción de peticiones
GIT API Calculadora Trabajaremos con ActiveMQ Usaremos los filtros de CW para
para estudiar el patrón editor transformar peticiones POST en
Actualiza tu Fork. Las suscriptor y la mensajería GET, POST, PUT, PATCH, DELETE…
Implementaremos la API
instrucciones de este asíncrona mediante colas y
REST definida en el Tema 6
ejercicio se encuentran topics.
para la calculadora
en la carpeta Tema_8.
34
Gracias
Despliegues en local mediante Docker
Imágenes y Contenedores Docker
• Una imagen Docker es un “paquete” con una funcionalidad concreta. Tiene en su
interior todas las herramientas necesarias para que el software que provee funcione
correctamente.
• Los contenedores Docker ejecutan imágenes Docker.
• Las imágenes Docker se crean a través de ficheros “Dockerfile” que son la receta
de las mismas.
36
Despliegues en local mediante Docker
Ejemplo de Dockerfile (repositorio de Eureka)
37
Despliegues en local mediante Docker
¿De qué forma desplegamos en local todo?
• Creamos imágenes (a partir de Dockerfile) situándonos en la raíz del proyecto
38
Despliegues en local mediante Docker
¿De qué forma desplegamos en local todo?
• Creamos contenedores (a partir de imágenes).
Importante el binding.
• También puede hacerse con el comando docker
run <<nombreImagen>> con –p para bindings y -
-env para asignación de variables de entorno.
39
Despliegues en local mediante Docker
En algunos casos, necesitaremos la IP del contenedor
• ¿De qué forma la obtenemos?
• O también…
docker inspect -f
‘{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}’
<<container-id>> 40
Despliegues en entornos reales: Railway
¿Qué es Railway?
• Proveedor de servicios en la nube basado en Amazon y disponible desde 2020.
• Permite desplegar código a partir de Dockerfiles en repositorios de GitHub, imágenes
de Docker Container Registry, de Github Container Registry (GHCR) o Quay.io. En el
caso de los repositorios establece CICD automático para desplegar automáticamente
el componente cuando se detecte un cambio en una rama.
• Permite desplegar bases de datos. Soporta despliegues automáticos out-of-the-box
para 4 bases de datos. Para las demás, es posible crearlas haciendo uso de Templates
o imágenes Docker.
41
Despliegues en entornos reales: Railway
¿Qué bases de datos soporta por defecto?
42
Despliegues en entornos reales: Railway
¿De qué forma puedo hacer uso de Railway?
Se pueden desplegar
Verificación OK (*) bases de datos y código
en el Free Trial (5$)
Se enlaza con cuenta de
GitHub válida
Se pueden desplegar
únicamente bases de
Verificación KO datos en el Free Trial
Creación de cuenta de (5$).
usuario (enlace)
Se pueden desplegar
No se enlaza con cuenta únicamente bases de
de GitHub válida datos en el Free Trial
(5$).
(*) La verificación depende, principalmente, de la antigüedad y actividad de la cuenta de GitHub
43
Despliegues en entornos reales: Railway
¿Alguna ayudita?
• He creado principalmente para vosotros (también
para el resto de usuarios de Railway) varios
templates para que el proceso de despliegue sea
un poco más sencillo.
• Son muy fáciles de utilizar. Hacéis click en
“Deploy Now” y configuráis las variables de
entorno tal como se indica. Para dudas… siempre
el foro del campus virtual.
• Espero que os sean útiles y os animo a completar
este “último paso” del ciclo de vida de las
aplicaciones tan buenas que estáis construyendo.
🥰
44
Despliegues en entornos reales: Railway
Enlace 🚀
Enlace 🚀
Enlace 🚀
Enlace 🚀
45
Railway
Recursos Audiovisuales Importantes
08.11
Despliegue de Back-End en entornos reales
46
Demo Time
¿DUDAS?
Gracias