Skip to content

Commit fad147a

Browse files
authored
modifcacion readme (#3)
1 parent a91acaa commit fad147a

File tree

2 files changed

+108
-37
lines changed

2 files changed

+108
-37
lines changed

.github/workflows/ci.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ on:
44
push:
55
branches:
66
- main
7-
pull_request:
8-
branches:
9-
- main
107

118
jobs:
129
build:

README.md

Lines changed: 108 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,127 @@
1-
# API REST con Spring Boot 3.5
1+
# API REST con Spring Boot 3.5 + Java 21
22

3-
Este proyecto es una demostraci\u00f3n de una API REST desarrollada con **Spring Boot 3.5** y **Java 21**.
3+
Proyecto de ejemplo construido con **Spring Boot 3.5** y **Java 21**. Forma parte de un portafolio personal y demuestra el uso de hilos virtuales de Project Loom, procesamiento asíncrono en lotes y la generación de una imagen nativa para despliegues ligeros.
44

5-
## Prop\u00f3sito
5+
## Propósito
66

7-
Implementar un ejemplo de backend que expone operaciones CRUD y procesamiento as\u00edncrono usando hilos virtuales.
7+
Implementar un backend sencillo que exponga operaciones CRUD de clientes y un procesamiento asíncrono de lotes. El proyecto sirve para explorar:
88

9-
## Tecnolog\u00edas principales
9+
- **Virtual Threads** (hilos virtuales) para alta concurrencia.
10+
- **GraalVM Native Image** Inicio instantáneo y consumo de memoria reducido.
11+
- Integración con **Spring Boot Actuator** y **Micrometer** para observabilidad.
12+
- Documentación automática con **SpringDoc OpenAPI (Swagger UI)**.
13+
- Pruebas unitarias e integración con **JUnit**, **Mockito** y **Testcontainers**.
1014

11-
- **Maven** para la gesti\u00f3n del proyecto.
12-
- **Spring Data JPA** con **PostgreSQL** como base de datos.
15+
## Tecnologías principales
16+
17+
- **Maven** para gestión de dependencias y empaquetado.
18+
- **Spring Data JPA** + **PostgreSQL** para persistencia.
1319
- **MapStruct** para el mapeo entre entidades y DTOs.
14-
- **Lombok** para reducir c\u00f3digo boilerplate.
15-
- **Jakarta Validation** para validaciones de datos de entrada.
16-
- **SpringDoc OpenAPI** para la documentaci\u00f3n de la API.
17-
- Hilos virtuales para tareas as\u00edncronas (ver `VirtualThreadConfig`).
18-
- Pruebas con **JUnit/Mockito** y **Testcontainers**.
20+
- **Lombok** para reducir código repetitivo.
21+
- **Jakarta Validation** para validación de datos de entrada.
22+
- **Spring Boot Actuator** y **Micrometer** para métricas y salud.
23+
- **SpringDoc OpenAPI** para generación de documentación REST.
24+
- **Procesamiento asíncrono** con hilos virtuales (`VirtualThreadConfig`).
25+
- **Pruebas** con JUnit 5, Mockito y Testcontainers.
26+
27+
## Pre-requisitos
28+
29+
- **JDK 21** instalado y en el `PATH`.
30+
- **PostgreSQL** accesible y configurado (ver `application.yml`).
31+
- (Opcional) **Docker** si se desea generar la imagen nativa localmente o ejecutar contenedores de prueba.
32+
33+
## Instalación y configuración
34+
35+
1. Clonar el repositorio:
36+
```bash
37+
git clone https://github.com/tu-usuario/spring-boot-3.5-java21-rest.git
38+
cd spring-boot-3.5-java21-rest
39+
```
40+
2. Configurar la conexión a la base de datos en `src/main/resources/application.yml`:
41+
```yaml
42+
spring:
43+
datasource:
44+
url: jdbc:postgresql://localhost:5432/mi_db
45+
username: postgres
46+
password: secret
47+
jpa:
48+
hibernate:
49+
ddl-auto: update
50+
threads:
51+
virtual:
52+
enable: true
53+
54+
```
55+
3. Ajustar parámetros adicionales (puertos, credenciales, etc.) según necesidad.
56+
57+
## Construir y ejecutar
58+
59+
### Modo JVM
1960

20-
## Requisitos previos
61+
```bash
62+
mvn clean spring-boot:run
63+
```
2164

22-
- **JDK 21** instalado.
23-
- **PostgreSQL** accesible y configurado seg\u00fan `src/main/resources/application.yml`.
65+
### Imagen nativa (GraalVM + Paketo Buildpacks)
2466

25-
## Compilar y ejecutar
67+
1. Asegurarse de tener `BP_NATIVE_IMAGE=true` en el `pom.xml`.
68+
2. Ejecutar:
69+
```bash
70+
mvn clean spring-boot:build-image
71+
docker run --rm -p 8080:8080 tu-imagen-nativa:latest
72+
```
2673

27-
```bash
28-
mvn spring-boot:run
29-
```
74+
## Endpoints REST
3075

31-
Para ejecutar las pruebas:
76+
| Método | Ruta | Descripción |
77+
|-------:|------------------------|----------------------------------|
78+
| GET | `/api` | Listar todos los clientes |
79+
| POST | `/api` | Crear un nuevo cliente |
80+
| PUT | `/api/{id}` | Actualizar un cliente existente |
81+
| DELETE | `/api/{id}` | Eliminar un cliente |
82+
| GET | `/api/consultar-lote` | Procesar un lote de clientes |
3283

33-
```bash
34-
mvn test
35-
```
84+
## Procesamiento asíncrono de lotes
85+
86+
- Servicio orquestador: `OrchestratorServiceImpl`.
87+
- Configuración de hilos virtuales en `VirtualThreadConfig`:
88+
```java
89+
@Bean
90+
VirtualThreadTaskExecutor virtualThreadTaskExecutor() {
91+
return new VirtualThreadTaskExecutor();
92+
}
93+
```
94+
- El endpoint dispara tareas en hilos virtuales, maneja resultados de forma no bloqueante.
95+
96+
## Observabilidad y métricas
97+
98+
- Endpoints de Actuator:
99+
- `/actuator/health`
100+
- `/actuator/metrics`
101+
- `/actuator/prometheus` (Micrometer)
102+
- Trazas distribuidas con OpenTelemetry.
103+
104+
## Pruebas
105+
106+
- **Unitarias**: JUnit 5 + Mockito (`mvn test`).
107+
- **Integración**: Testcontainers para PostgreSQL.
36108

37-
## Endpoints principales
109+
## CI / CD
38110

39-
- `GET /api` - Lista todos los clientes.
40-
- `POST /api` - Crea un nuevo cliente.
41-
- `PUT /api/{id}` - Actualiza un cliente existente.
42-
- `DELETE /api/{id}` - Elimina un cliente.
43-
- `GET /api/consultar-lote` - Procesa de manera as\u00edncrona un lote de clientes.
111+
Flujo de GitHub Actions para:
44112

45-
Estas operaciones se encuentran en `ClientControllerImpl`. El procesamiento as\u00edncrono est\u00e1 orquestado por `OrchestatorServiceImpl` y `ClientThreadVirtualServiceImpl` empleando el `virtualThreadTaskExecutor` definido en `VirtualThreadConfig`.
113+
1. Ejecutar pruebas unitarias e integración.
114+
2. Construir y empaquetar la aplicación.
115+
3. Generar y publicar la imagen nativa.
116+
4. (Opcional) Desplegar a Render u otro servicio.
46117

47-
## Archivos y clases relevantes
118+
## Contribuciones
48119

49-
- `pom.xml` define todas las dependencias y plugins mencionados.
50-
- `application.yml` contiene la configuraci\u00f3n de la base de datos y de SpringDoc OpenAPI.
51-
- Clases en `src/main/java/com/dhh/apiRestSpringboot3` implementan los controladores, servicios y mapeos de la aplicaci\u00f3n.
120+
1. Hacer fork del repositorio.
121+
2. Crear una rama feature (`git checkout -b feature/nueva-funcionalidad`).
122+
3. Realizar cambios y commit.
123+
4. Enviar pull request.
52124

125+
## Licencia
53126

127+
Este proyecto está bajo la **Licencia MIT**.

0 commit comments

Comments
 (0)