44 lines
4.1 KiB
Markdown
44 lines
4.1 KiB
Markdown
# Decisiones técnicas
|
||
|
||
## ADR-001 — Base reproducible (2026-10-26)
|
||
|
||
Estado: seleccionada; verificación de runtime JDK 21 y PostgreSQL pendiente en T01.
|
||
|
||
| Componente | Selección | Motivo |
|
||
|---|---|---|
|
||
| Java | 21, `release=21`, Enforcer `[21,22)` | Versión requerida por la especificación |
|
||
| Spring Boot / BOM | 4.1.2 / spring-boot-dependencies 4.1.2 | Release estable verificada en documentación oficial y Maven Central; compatible con Java 21 |
|
||
| Maven | 3.9.12 | Wrapper oficial con distribución fija |
|
||
| Maven Wrapper | 3.3.4, only-script | Scripts oficiales, sin JAR de wrapper en el repositorio |
|
||
| PostgreSQL | 17.11-bookworm | Major 17 requerido y parche fijo; imagen pendiente de pull/verificación con Docker |
|
||
| JUnit | 5.13.4 | Mantener JUnit 5 requerido; sobrescribir junit-jupiter.version del BOM |
|
||
| Surefire / Failsafe | 3.5.4 | Separar pruebas unitarias de integración; verify ejecuta ambas |
|
||
| Maven Enforcer | 3.6.2 | Fallar explícitamente si el JDK no es 21 |
|
||
|
||
MVC, Security, Hibernate, Flyway, JDBC PostgreSQL y demás dependencias se resuelven desde el BOM fijado. No declarar versiones dinámicas ni snapshots de dependencias. `0.1.0-SNAPSHOT` es la versión de desarrollo de este proyecto, no una dependencia externa.
|
||
|
||
Spring Boot 4 usa starters modulares: `webmvc`, `security-oauth2-resource-server` y `flyway`. No se añade `springdoc` hasta validar compatibilidad en T02. OpenAPI será contractual. Testcontainers y servidor de mocks se fijarán y verificarán al incorporarse en T03/T11. No adoptar automáticamente dependencias de test de Boot que cambien JUnit 5; comprobar integración con Spring Test al introducirla.
|
||
|
||
Fuentes consultadas el 2026-10-26:
|
||
|
||
- [Requisitos oficiales de Spring Boot](https://docs.spring.io/spring-boot/system-requirements.html).
|
||
- [Dependencias gestionadas](https://docs.spring.io/spring-boot/appendix/dependency-versions/coordinates.html).
|
||
- [POM publicado de Boot 4.1.2](https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-parent/4.1.2/spring-boot-starter-parent-4.1.2.pom).
|
||
- [PostgreSQL: descargas y release 17.11](https://www.postgresql.org/download/).
|
||
|
||
Alternativa: Boot 3.5, compatible con Java 21, pero se prefiere la línea estable actual para un proyecto nuevo. No cambia la semántica del motor. La compatibilidad de bibliotecas futuras se verificará antes de incorporarlas.
|
||
|
||
## ADR-002 — Alcance de esta entrega
|
||
|
||
El pedido actual comprende arquetipo, plan y seguimiento. Se prepara T01 y se documenta T02–T17; no se implementan anticipadamente el dominio, contratos incompletos ni endpoints con respuestas simuladas. Las tareas se cierran con sus verificaciones, no por existencia de carpetas.
|
||
|
||
La configuración local conserva JWT y exige parámetros externos. No se incluye issuer falso ni contraseña predeterminada. El Compose actual es exclusivamente de desarrollo; no es un despliegue productivo.
|
||
|
||
## ADR-003 — Docker del servicio con PostgreSQL externo (2026-10-26)
|
||
|
||
Por instrucción expresa del usuario se adelanta el empaquetado del arquetipo: Compose contiene sólo orquestador y sustituye el anterior servicio PostgreSQL. No administra base ni volúmenes externos. T17 no se considera terminado: la demo integral sigue pendiente de sus dependencias.
|
||
|
||
Dockerfile multietapa con Temurin 21.0.12.1_1 (JDK para construir, JRE para ejecutar), tags verificados en el [catálogo oficial](https://github.com/docker-library/official-images/blob/master/library/eclipse-temurin). Runtime no root y healthcheck de readiness. Maven Wrapper construye con package y ejecuta pruebas unitarias; verify con integración permanece en CI. El contexto permite sólo fuentes, POM y Wrapper; excluye .env, target y archivos del IDE.
|
||
|
||
Compose exige DB_URL/usuario/contraseña y parámetros JWT, conserva el puerto interno 8080 y publica localhost:8080 por defecto. Se incluye host-gateway para PostgreSQL en el anfitrión. La construcción y conexión real están pendientes de un entorno Docker y valores externos. Referencias: [build multietapa](https://docs.docker.com/build/building/multi-stage/) e [interpolación de Compose](https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/).
|