Ir al contenido principal

Destacado

Monitoring your micro services with Spring Boot Admin

This new joetip is for those who have in their architecture some micro-services developed with Spring Boot and are already using some Spring Cloud projects such as Spring Cloud Config and Spring Cloud Eureka as Discovery server.

The Spring Boot Admin is a project developed by CodeCentric which is available for free at https://github.com/codecentric/spring-boot-admin so we can monitor our microservices.

In order for these micro-services to be monitored, we have 2 options:


Placing the dependency of spring boot admin client on each projectOr configuring the Eureka (Consul or Zookeeper) so that you can monitor the micro-services that are already registered in it.

I will explain step by step what has to be done to work with the spring boot admin in our microservices cluster. But, if you are impatient and already want to try it, here is the GitHub repository: https://github.com/joedayz/spring-boot-admin-cloud-finchley.

For my demos I will use the following projects and the following versions…

Ejecutar Stored Procedures con JPA 2.1



Hoy generamos en mi trabajo una nueva versión para UAT (User Acceptance Test) y nos dimos con este problema.

Problema

Teníamos que llamar a dos stored procedures usando SimpleJdbcCall.
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(spJdbcTemplate).withProcedureName(“DELETE_LANE”);
Map in = new HashMap<>();
in.put(“V_LANE_ID”, laneId);

Map out = jdbcCall.execute(in);
El Stored procedure solo recibe un parámetro y no retorna nada, pero, si ejecuta varias operaciones intermedias que omito para este post.


Si bien en nuestro entorno de desarrollo trabajo muy bien, en UAT nos dio este problema:



Que se resume en: “Unable to determine the correct call signature - no procedure/function/signature for ‘DELETE_LANE'”.

Solución

Deduje que no resolvía bien el tipo del parámetro de entrada y que debía ser más explícito. Por suerte, ya sabía que en la versión de JPA 2.1 había soporte para stored procedures, así que procedí a implementarlo:
En la entidad Lane.java añadí el nuevo @NamedStoredProcedureQuery. El atributo name es el nombre interno que usarás en tu aplicación, el valor en procedureName es el nombre real del procedimiento almacenado y luego vienen los parameters donde debes indicar si es IN o OUT , tipo y nombre. Lo cual ya “adivinaba” me ayudaría a resolver mi problema.


Luego tocaba dejar de usar SimpleJdbcCall y usar esta nueva forma de ejecución de stored procedure:


Con 3 simples líneas:
StoredProcedureQuery query = this.em.createNamedStoredProcedureQuery(“deleteLane”);
query.setParameter(“V_LANE_ID”, laneId);
query.execute();
Eso sí como ven necesitan el EntityManager.  Pero en proyectos con Spring Boot es muy sencillo basta un @PersistenceContext private EntityManager em y eso es todo.



Y bueno eso es todo, se volvió a probar, desplegar en UAT y está funcionando muy bien.
Enjoy!





Comentarios

  1. José, gracias por compartir tus conocimientos a través de tu blog, un consejo quizá podría compartir un link de descarga en cada entrada, que contenga el código fuente ya que muchas veces uno se suele perder un poco y a veces hay problemas con la configuración y versiones. Muy buen blog, lo compartiré

    ResponderEliminar
    Respuestas
    1. Tienes mucha razón , voy a seguir tus recomendaciones, post publicado y si involucra código lo tendré listo y publicado en github.com/joedayz.

      Eliminar

Publicar un comentario