Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/interezante456-pixel/Miercoles-Proyecto/llms.txt

Use this file to discover all available pages before exploring further.

Toda la configuración del backend Spring Boot de Tiendas Mi Cholo se centraliza en el archivo backend/src/main/resources/application.properties. Este archivo controla desde la conexión a MySQL y el pool de conexiones HikariCP hasta los parámetros del sistema de autenticación JWT, las políticas de CORS para el frontend Angular, los niveles de logging y los límites de carga de archivos. Antes de arrancar el backend por primera vez, revisa cada sección para adaptarla a tu entorno.

Archivo application.properties completo

El siguiente es el contenido exacto del archivo de configuración tal como se encuentra en el repositorio:
# ============================================================
#  SPRING BOOT — Configuración de la Aplicación
# ============================================================

spring.application.name=tienda-backend

# ------------------------------------------------------------
# Base de Datos — MySQL (Docker)
# ------------------------------------------------------------
spring.datasource.url=jdbc:mysql://localhost:3306/tienda_db?useSSL=false&serverTimezone=America/Lima&allowPublicKeyRetrieval=true&characterEncoding=UTF-8
spring.datasource.username=tienda_user
spring.datasource.password=tienda123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# Pool de conexiones HikariCP
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=2
spring.datasource.hikari.connection-timeout=30000

# ------------------------------------------------------------
# JPA / Hibernate
# ------------------------------------------------------------
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.use_sql_comments=false
spring.jpa.open-in-view=false

# ------------------------------------------------------------
# JWT
# ------------------------------------------------------------
app.jwt.secret=TiendaJwtSecretKey2024SuperSecureBase64EncodedStringForHS256Algorithm
app.jwt.expiration=86400000
app.jwt.refresh-expiration=604800000

# ------------------------------------------------------------
# Servidor
# ------------------------------------------------------------
server.port=8080
server.servlet.context-path=/api

# ------------------------------------------------------------
# CORS (permite peticiones desde Angular en desarrollo)
# ------------------------------------------------------------
app.cors.allowed-origins=http://localhost:4200

# ------------------------------------------------------------
# Logging
# ------------------------------------------------------------
logging.level.com.tienda=DEBUG
logging.level.org.springframework.security=INFO
logging.level.org.hibernate.SQL=ERROR

# ------------------------------------------------------------
# Archivos multimedia (imágenes de productos)
# ------------------------------------------------------------
spring.servlet.multipart.max-file-size=5MB
spring.servlet.multipart.max-request-size=10MB
app.upload.dir=uploads/productos

Referencia de secciones de configuración

Base de datos y HikariCP

PropiedadValor por defectoDescripción
spring.datasource.urljdbc:mysql://localhost:3306/tienda_db?...URL JDBC completa con parámetros de zona horaria, encoding y SSL
spring.datasource.usernametienda_userUsuario de la base de datos creado por Docker Compose
spring.datasource.passwordtienda123Contraseña del usuario de base de datos
spring.datasource.driver-class-namecom.mysql.cj.jdbc.DriverDriver JDBC para MySQL 8 (conector mysql-connector-j)
hikari.maximum-pool-size10Máximo de conexiones simultáneas en el pool
hikari.minimum-idle2Conexiones mínimas mantenidas abiertas en reposo
hikari.connection-timeout30000 (ms)Tiempo máximo de espera para obtener una conexión del pool (30s)

JPA / Hibernate

PropiedadValorDescripción
spring.jpa.hibernate.ddl-autovalidateHibernate valida el esquema contra las entidades pero no lo modifica
spring.jpa.show-sqlfalseLas sentencias SQL no se imprimen en consola (control vía logging)
hibernate.dialectMySQL8DialectDialecto optimizado para MySQL 8, habilita features específicas del motor
spring.jpa.open-in-viewfalseDesactiva el antipatrón Open Session in View para mejor rendimiento
Con spring.jpa.hibernate.ddl-auto=validate, Hibernate no crea ni altera tablas. El esquema de la base de datos debe existir antes de arrancar la aplicación. Usa el script database/schema.sql para crearlo (ya sea manualmente o dejando que Docker Compose lo inyecte automáticamente en el primer arranque).

JWT (autenticación)

PropiedadValor por defectoDescripción
app.jwt.secretTiendaJwtSecretKey2024...Clave secreta HMAC-SHA256 usada para firmar y verificar los tokens
app.jwt.expiration86400000 (ms)Duración del access token: 24 horas
app.jwt.refresh-expiration604800000 (ms)Duración del refresh token: 7 días
El sistema soporta tres roles: ADMIN, VENDEDOR y ALMACENERO. Los tokens incluyen el rol del usuario en sus claims para que Spring Security pueda aplicar las reglas de autorización en cada endpoint.
Cambia app.jwt.secret antes de desplegar en producción. El valor por defecto es público y conocido. Usa un generador de claves aleatorias para producir una cadena segura de al menos 64 caracteres codificada en Base64. Una clave comprometida permite que cualquier atacante forje tokens JWT válidos para cualquier rol.
# Genera una clave segura de 64 bytes en Base64
openssl rand -base64 64

Servidor

PropiedadValorDescripción
server.port8080Puerto en el que escucha el servidor Tomcat embebido
server.servlet.context-path/apiPrefijo global de todos los endpoints (ej: http://localhost:8080/api/productos)

CORS

PropiedadValorDescripción
app.cors.allowed-originshttp://localhost:4200Origen(s) permitidos para peticiones cross-origin; apunta al servidor de desarrollo Angular
En producción, reemplaza este valor con la URL real del frontend desplegado (ej: https://mitienda.com). Puedes especificar múltiples orígenes separados por coma si tu configuración CORS lo soporta.

Logging

PropiedadNivelDescripción
logging.level.com.tiendaDEBUGLogs detallados de todo el código de aplicación del paquete com.tienda
logging.level.org.springframework.securityINFOEventos de seguridad (autenticación, autorización) sin verbosidad excesiva
logging.level.org.hibernate.SQLERRORSuprime las sentencias SQL de Hibernate en consola; solo muestra errores

Carga de archivos (multipart)

PropiedadValorDescripción
spring.servlet.multipart.max-file-size5MBTamaño máximo por archivo individual subido (imágenes de productos)
spring.servlet.multipart.max-request-size10MBTamaño máximo total de una petición multipart
app.upload.diruploads/productosDirectorio relativo a la raíz del proceso donde se almacenan las imágenes

Configuración del frontend Angular

El frontend Angular se conecta al backend a través de la constante API_URL definida en core/config/api.config.ts. Por defecto apunta al servidor de desarrollo local:
// Frontend/src/app/core/config/api.config.ts
export const API_URL = 'http://localhost:8080/api';
Todos los servicios HTTP del frontend construyen sus URLs concatenando API_URL con el path del recurso (ej: ${API_URL}/productos, ${API_URL}/auth/login).

Sobreescribir propiedades para producción

Spring Boot permite sobreescribir cualquier propiedad de application.properties mediante variables de entorno o un archivo application-prod.properties activado por perfil. Esto es ideal para no hardcodear credenciales sensibles en el código fuente. Opción 1 — Variables de entorno (recomendado para contenedores / CI/CD):
export SPRING_DATASOURCE_URL=jdbc:mysql://prod-db-host:3306/tienda_db?useSSL=true&serverTimezone=America/Lima
export SPRING_DATASOURCE_USERNAME=tienda_prod_user
export SPRING_DATASOURCE_PASSWORD=SuperSecretProdPassword
export APP_JWT_SECRET=$(openssl rand -base64 64)
export APP_CORS_ALLOWED_ORIGINS=https://mitienda.com
Opción 2 — Perfil de producción (application-prod.properties):
# Activa el perfil "prod" al arrancar
java -jar backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
# backend/src/main/resources/application-prod.properties
spring.datasource.url=jdbc:mysql://prod-db-host:3306/tienda_db?useSSL=true&serverTimezone=America/Lima
spring.datasource.username=tienda_prod_user
spring.datasource.password=SuperSecretProdPassword
app.jwt.secret=<clave-generada-con-openssl>
app.cors.allowed-origins=https://mitienda.com
logging.level.com.tienda=WARN
logging.level.org.springframework.security=WARN
Las propiedades del perfil de producción sobreescriben las del application.properties base. Solo necesitas incluir en application-prod.properties las propiedades que difieren del entorno de desarrollo; el resto se hereda automáticamente.

Build docs developers (and LLMs) love