¿Por qué su Spring Boot «no quiere» escuchar en el 8080?
\nUsted inicia su primera aplicación Spring Boot, ve el codiciado banner en la consola, abre el navegador — y aparece «Connection refused». ¿Le suena familiar? La mayoría de las veces el problema es que el puerto 8080 ya está ocupado por otro proceso (por ejemplo, Skype, Docker o una segunda instancia de su propia aplicación). O, por el contrario, necesita ejecutar tres microservicios en una misma máquina, y todos quieren tomar el mismo puerto.
\nEn este artículo analizaremos todas las formas principales de configurar el puerto en Spring Boot, desde las más simples hasta las «de producción» para entornos reales. Aprenderá cómo sobrescribir el puerto mediante archivos de configuración, variables de entorno, argumentos de línea de comandos e incluso programáticamente. Al final, le daré una lista de verificación para elegir qué método usar según la situación.
\n\nForma 1: application.properties — el clásico
\nEl método más común e intuitivo. En el archivo src/main/resources/application.properties basta con agregar una línea:
server.port=9090\nEso es todo. Después de reiniciar la aplicación, escuchará en el puerto 9090. Si necesita volver al 8080, simplemente elimine o comente la línea.
\nVentajas: simplicidad, claridad, funciona «de fábrica».
\nDesventajas: está fijo en el código — para cada entorno (dev, test, prod) habrá que cambiar el archivo manualmente o usar perfiles.
\n\nForma 2: application.yml (YAML) — para los amantes de la estructura
\nSi prefiere el formato YAML, la configuración se verá así:
\nserver:\n port: 9090\nPreste atención a la indentación: dos espacios antes de port. YAML es sensible a los espacios, pero permite agrupar configuraciones. Por ejemplo, puede definir también la ruta de contexto:
server:\n port: 9090\n servlet:\n context-path: /myapp\nCuándo usarlo: si su proyecto ya utiliza YAML para todas las configuraciones (por ejemplo, para Spring Cloud Config).
\n\nForma 3: Argumentos de línea de comandos — flexibilidad para DevOps
\nLa forma más flexible, que se usa a menudo en contenedores y CI/CD. Al ejecutar el archivo JAR, simplemente pase el parámetro:
\njava -jar myapp.jar --server.port=9090\nO, si usa el plugin de Maven/Gradle:
\nmvn spring-boot:run -Dspring-boot.run.arguments=--server.port=9090\nLos argumentos de línea de comandos tienen la máxima prioridad entre todas las formas de configuración en Spring Boot. Esto significa que sobrescribirán incluso lo que está escrito en application.properties.
Ideal para: contenedores Docker, Kubernetes, despliegues automatizados.
\n\nForma 4: Variables de entorno — el estándar de las aplicaciones de doce factores
\nSpring Boot lee automáticamente las variables de entorno y las convierte en propiedades. La regla es simple: SERVER_PORT (en mayúsculas, guion bajo en lugar de punto) se convierte en server.port.
En Linux/macOS:
\nexport SERVER_PORT=9090\njava -jar myapp.jar\nEn Windows (cmd):
\nset SERVER_PORT=9090\njava -jar myapp.jar\nEn Docker Compose se ve aún más elegante:
\nservices:\n myapp:\n image: myapp:latest\n ports:\n - "9090:9090"\n environment:\n - SERVER_PORT=9090\nPor qué es genial: las variables de entorno no se incluyen en el repositorio, son fáciles de cambiar para diferentes entornos y siguen la metodología de aplicación de doce factores.
\n\nForma 5: Configuración programática — para el microgestión
\nA veces es necesario calcular el puerto dinámicamente (por ejemplo, encontrar un puerto libre u obtenerlo de un servicio externo). Entonces el código Java viene al rescate.
\nLa opción más simple es sobrescribir el método setServerPort en la clase