Spring Boot es magia

No se puede negar que Josh Long y la gente de Spring están luchando por cambiar la mentalidad de los que piensan o hemos pensado que Spring Boot hace demasiada magia, de la negra, de la que luego no te explican cuál fue el truco.

El framework Spring Boot basa su filosofía en (entre otras cosas) una cantidad ingente de condiciones que evalúan, por ejemplo, si hay cierta clase en el classpath y en caso de que exista dicha clase, instanciar beans de configuración para ahorrarnos ese trabajo. De esta manera, al arrancar y detectar clases de MySQL en el classpath (porque se añadió la dependencia), Spring Boot evalúa las condiciones resultando en la instanciación de beans de configuración como dataSource y jdbcTemplate. Spring Boot supone -y lo hace bien- que necesitaremos esos beans porque para algo hemos incluido la dependencia.

Spring Boot también hace magia con las propiedades, ya sean a través de variables de entorno, argumentos en la línea de comandos, en un archivo YAML o en un archivo .properties. Las clases de Spring Boot se autoinyectan estas propiedades que escribimos para autoconfigurarse y, de nuevo, ahorrarnos clases de configuración.

Gracias a esto, basta sólo con añadir la propiedad spring.cloud.config.uri=http://localhost:3334 al application.properties de un proyecto Spring Boot y añadir la dependencia spring-cloud-config-client en el POM. Al arrancar este proyecto, la aplicación intentaría conectarse con un servidor de gestión de configuración que escucharía en el puerto 3334 y descargaría su configuración de la URL http://localhost:3334/application/default si el nombre de la aplicación es application (Propiedad spring.application.name).

No hace magia, es convención sobre configuración y mucho trabajo por debajo, pero a veces las cosas no fluyen como uno quiere. En más de una ocasión y en más de dos, sí que ha arrancado pero no me ha funcionado una aplicación por falta de configuración ya que no se ha podido conectar al servidor de configuración sin la dependencia spring-cloud-config-client en el POM ¿Lógico, verdad? Pero estos olvidos ocurren y el eclipse todopoderoso no pudo ayudarme a recordar añadir la dependencia.

Tanta autoconfiguración nos lleva a otro tipo de errores más escondidos y con mensajes de error más confusos con los que hay que tener más cuidado, completamente al revés de la filosofía fail-fast con la que se prefiere que los errores aparezcan en etapas tempranas para que puedan ser corregidos antes de que suponga algún tipo de pérdida en el momento en que aparezca.

Afortunadamente los IDEs nos siguen ayudando en la medida que pueden, en este caso eclipse no, pero sí Spring Tool Suite que provee autocompletado para archivos de propiedades y sólo sugiere las propiedades que inyectarían las dependencias incluidas en el POM.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s