Cómo cambiar el puerto para aplicaciones Spring Boot

En esta guía, hemos analizado cómo cambiar el puerto Spring Boot predeterminado a través de un archivo de propiedades, mediante programación para leer variables de entorno durante la implementación y a través de la CLI.

Introducción

Las aplicaciones Spring Boot se envían con un servidor integrado y el puerto predeterminado para ellas es 8080. Si algún otro servicio ya inhibe este puerto, o si desea crear un nuevo microservicio en uno nuevo, en esta guía veremos cómo configurar el puerto de una aplicación Spring Boot.

application.properties y application.yml

Hay dos tipos de archivos de propiedades que se usan normalmente en los proyectos de Spring Boot: application.properties y application.yml.

El archivo application.properties sigue un formato simple de clave-valor, donde cada línea representa una nueva clave. El archivo application.yml sigue el formato YAML.

Ambos son muy legibles por humanos y sencillos y, por lo general, cuando comienza con un proyecto de esqueleto, server.port es la única configuración que tendrá.

Para application.properties:

1
server.port = 8090

Para aplicación.yml:

1
2
server:
  port: 8090

{.icon aria-hidden=“true”}

Nota: Puede establecer el puerto en un puerto disponible aleatorio, configurándolo en 0. Que luego se puede obtener a través de @Value("${local.server.port}").

Establecer el puerto Spring Boot mediante programación {#setspringbootport programáticamente}

Además, puede configurar el puerto mediante programación, ya que la mayoría de los aspectos de la personalización se pueden expresar en última instancia a través de clases y anotaciones en Spring Boot.

La interfaz WebServerFactoryCustomizer nos permite personalizar la fábrica del servidor. La fábrica del servidor "consultará" cualquier bean de este tipo antes de configurar el servidor en sí, por lo que también puede configurar el puerto, la dirección, las páginas de error, etc.

El método customize() es el único expuesto en la interfaz, y todo lo que no establezcas en el método se deja en los valores predeterminados. Si solo desea cambiar el puerto, simplemente invoque el método setPort() de la instancia de fábrica genérica. La fábrica predeterminada es TomcatServletWebServerFactory:

1
2
3
4
5
6
7
8
@Component
public class ChangePort implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
     
    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.setPort(8090);
    }
}

Para una fábrica de servlets genéricos, puede usar:

1
2
3
4
5
6
7
8
@Component
public class ChangePort implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {
     
    @Override
    public void customize(ConfigurableWebServerFactory factory) {
        factory.setPort(8090);
    }
}

Spring Boot selecciona automáticamente los beans que implementan WebServerFactoryCustomizer y, con solo definirlo, puede modificar el proceso de inicio del servidor.

¿Por qué lo configurarías programáticamente en lugar de a través de un archivo de configuración?

Cambiar un archivo de configuración mediante programación es una molestia mayor que configurar el puerto mediante programación. Al implementar aplicaciones en hosts remotos, es posible que deba leer el puerto propuesto de la aplicación a través de variables de entorno u otro archivo de configuración y configurar el puerto de la aplicación en función de los datos de entrada.

En ese caso, en lugar de leer y modificar un archivo, es mucho más sencillo y limpio simplemente leer las variables de entorno y establecer el puerto en función de ellas.

Establecer puerto con CLI

Finalmente, puede cambiar fácilmente el puerto de una aplicación al iniciarla, a través de la CLI. Es posible que no esté utilizando la CLI para iniciar la aplicación, en cuyo caso, las dos opciones anteriores probablemente sean más adecuadas para usted.

Si está utilizando Maven, al iniciar su aplicación, incluya un argumento JVM:

1
$ mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=8090'

O, si está utilizando la propia CLI de Spring, puede pasar argumentos de línea de comando separados de los argumentos de comando de Spring agregando un -- adicional en blanco:

1
$ spring run application_name.groovy -- --server.port=8090

Conclusión

En este breve tutorial, echamos un vistazo rápido a tres formas de cambiar el puerto predeterminado de una aplicación Spring Boot. Puede cambiar el puerto predeterminado modificando el archivo de propiedades apropiado, programáticamente implementando un WebServerFactoryCustomizer o mediante la CLI.