Breaking

Post Top Ad

Your Ad Spot

viernes, 14 de junio de 2019

Perfiles de arranque de primavera para entornos DEV y PROD

Este artículo se aplica a los sitios creados con el marco Spring Boot, utilizando Apache Maven como herramienta de compilación. Para demostrar cómo funcionan los perfiles, visitaremos un ejemplo utilizando Google Analytics y Google Tag Manager para realizar un seguimiento de las métricas del sitio. Utilizo este método para mi sitio web, Initial Commit , que se construye con Spring Boot, el motor de plantillas de Thymeleaf, y está alojado en AWS Elastic Beanstalk.

¿Qué son los perfiles de arranque de primavera?

Uno de los principios básicos de diseño detrás de Spring Boot es que fomenta la convención sobre la configuración. Esto significa que la gran mayoría de las configuraciones de aplicaciones utilizan valores predeterminados razonables que pueden ser anulados cuando sea necesario, pero en general una aplicación Spring Boot funcionará de manera inmediata sin necesidad de una configuración personalizada.
Sin embargo, normalmente es necesaria cierta personalización y muchas veces necesitamos personalización específica del entorno. Aquí es donde los perfiles son útiles. Un perfil en Spring Boot se puede considerar como un contexto que define un conjunto específico de configuraciones, variables y comportamientos de la aplicación. Cada vez que se crea la aplicación, el desarrollador puede especificar qué perfil usar. Si no se especifica ningún perfil, se utilizará el valor predeterminado.
En este artículo, crearemos un perfil DEV y un perfil PROD para habilitar las propiedades de configuración específicas del entorno.
Podemos definir fácilmente los perfiles agregando el siguiente XML al pom.xmlarchivo del proyecto :
    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <activatedProperties>dev</activatedProperties>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <activatedProperties>prod</activatedProperties>
            </properties>
        </profile>
    </profiles>
Tenga en cuenta la <activeByDefault>true</activeByDefault>etiqueta, lo que significa que el perfil de desarrollo se utilizará de forma predeterminada, suponiendo que no se especifique ningún perfil en el momento de la creación.
Los perfiles funcionan junto con los archivos de propiedades de Spring Boot. De forma predeterminada, Spring Boot analiza un archivo llamado application.properties, ubicado en el src/main/resourcesdirectorio, para identificar la información de configuración.
Nuestra primera tarea será agregar un parámetro en ese archivo que le indicará a Spring que use un archivo de propiedades específico del entorno diferente correspondiente al perfil activo (es decir, el perfil con el que se está ejecutando actualmente la aplicación). Podemos hacer esto agregando lo siguiente al application.propertiesarchivo:
spring.profiles.active=@activatedProperties@  
Ahora necesitamos crear los dos nuevos archivos de propiedades específicos del entorno (en la misma ruta que el application.propertiesarchivo existente ), uno para el perfil DEV y otro para el perfil PROD. Estos archivos deben ser nombrados como los siguientes:
  • application-dev.properties
  • application-prod.properties
Dentro de cada uno de estos archivos, se pueden definir propiedades que solo se aplicarán cuando el perfil correspondiente esté activo.
Para aclarar este concepto, consideremos un ejemplo del mundo real que involucra la configuración de Google Analytics y Google Tag Manager en un sitio de Spring Boot, que veré en detalle en las siguientes secciones.

Descripción general de Google Analytics y Google Tag Manager

Si es un desarrollador web con un sitio activo, es una buena apuesta que utilice la plataforma de Google para sus análisis, seguimiento de eventos, seguimiento de conversiones y estadísticas de clasificación de motores de búsqueda.
Las siguientes herramientas gratuitas de Google proporcionan estos servicios:
  1. Google analitico
  2. Administrador de etiquetas de Google
  3. Consola de búsqueda de Google
Google Analytics se enlaza a su dominio y realiza un seguimiento de una amplia gama de estadísticas, incluidas vistas de páginas, información de sesión, ubicación de audiencia y activadores de eventos en contextos históricos y en tiempo real.
Google Tag Manager se integra con Google Analytics y permite a los desarrolladores definir los eventos que Google Analytics realiza un seguimiento. Esto se hace mediante la definición de escuchas de Tag Manager que se vinculan a elementos HTML específicos en su sitio web, que esperan a que ocurran los eventos especificados (como un clic o desplazamiento). Cuando un usuario del sitio ejecuta el evento, se realiza una llamada a Google Analytics, que registra el evento.
La Consola de búsqueda de Google proporciona información sobre cómo Google rastrea su sitio, cuántos sitios enlazan de vuelta al suyo y dónde se clasifica su sitio según las palabras clave de búsqueda.
Si ha usado estas herramientas anteriormente, sabrá que para vincular su sitio web a su cuenta de Google Analytics, Google proporciona una ID de seguimiento en el siguiente formato:
UA-123456789-1  
Este ID de seguimiento se integra en su sitio a través de un fragmento de código HTML provisto por Google:
<!-- Global site tag (gtag.js) - Google Analytics -->  
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-123456789-1"></script>  
<script>  
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', ‘UA-123456789-1');
</script>  
Del mismo modo, el Administrador de etiquetas de Google proporciona un ID de GTM en el siguiente formato:
GTM-ABCDEF1  
Esto también debe estar integrado en su sitio a través de un fragmento de código HTML:
<!-- Google Tag Manager -->  
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':  
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],  
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=  
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);  
})(window,document,'script','dataLayer','GTM-ABCDEF1');</script>
<!-- End Google Tag Manager -->

<!-- Google Tag Manager (noscript) -->  
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-ABCDEF1"  
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>  
<!-- End Google Tag Manager (noscript) -->  

Configurando IDs de Seguimiento con Perfiles

Ahora, todo esto está muy bien: los usuarios que interactúan con el sitio activarán los datos para iniciar sesión en la cuenta de Google Analytics vinculada. Sin embargo, dado que las ID de seguimiento están codificadas en las páginas HTML, los datos se rastrearán incluso cuando los desarrolladores y evaluadores carguen estas páginas en las versiones de desarrollo y prueba del sitio. Esto sesgará los datos e inflará las estadísticas reales del sitio.
Para resolver este problema, podemos configurar valores ficticios para las ID de seguimiento en el perfil de desarrollo para que no se registren datos en Google cuando se accede a las páginas del sitio en los entornos inferiores.
El perfil DEV definirá valores ficticios para las ID de seguimiento de Google Analytics y Tag Manager, y el perfil PROD utilizará los valores reales. Luego reemplazaremos los valores codificados en las plantillas HTML con el valor de propiedad dinámica.
En el archivo de propiedades de DEV application-dev.properties, podemos agregar los valores ficticios para las ID de seguimiento de Google Analytics y Tag Manager de esta manera:
googleanalyticsid=UA-XXXXXXXXXX-1  
googletagmanagerid=GTM-XXXXXX1  
En el archivo de propiedades PROD application-prod.properties, podemos agregar los valores reales para las ID de seguimiento de Google Analytics y Tag Manager:
googleanalyticsid=UA-123456789-1  
googletagmanagerid=GTM-ABCDEF1  
El último paso es reemplazar la referencia codificada a los identificadores de seguimiento en las plantillas HTML. Usando el motor de plantillas de Thymeleaf , esto se puede hacer reemplazando el ID de seguimiento de Google Analytics con código rígido por:
${@environment.getProperty('googleanalyticsid')}
y el ID de seguimiento de Google Tag Manager con:
${@environment.getProperty('googletagmanagerid')}
El resultado final es que los fragmentos de código proporcionados por Google ahora se ven así (tenga en cuenta que debido a las comillas anidadas, se agregan corchetes dobles alrededor de la variable):
    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async th:src="'https://www.googletagmanager.com/gtag/js?id=' + ${@environment.getProperty('googleanalyticsid')}"></script>
    <script>
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());

        gtag('config', "[[${@environment.getProperty('googleanalyticsid')}]]");
    </script>

    <!-- Google Tag Manager -->
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(window,document,'script','dataLayer',"[[${@environment.getProperty('googletagmanagerid')}]]");</script>
    <!-- End Google Tag Manager -->

    <!-- Google Tag Manager (noscript) -->
    <noscript><iframe th:src="'https://www.googletagmanager.com/ns.html?id=' + ${@environment.getProperty('googletagmanagerid')}"
    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <!-- End Google Tag Manager (noscript) -->
¡Eso es! Ahora, siempre que la aplicación se genere y ejecute sin especificar el perfil, por ejemplo, dentro de un IDE como Spring Tool Suite, Eclipse o IntelliJ, el perfil DEV se elegirá de forma predeterminada y los valores ficticios se sustituirán por los identificadores de seguimiento de Google. Esto evitará que las cargas de página y los eventos activados registren datos en la plataforma de Google.

Especificando el perfil en tiempo de construcción

Al crear la aplicación para producción, debemos especificar que el perfil PROD se utilizará para que se utilicen los valores de ID de seguimiento reales. Aquí es cómo se hace esto usando Maven como la herramienta de compilación:
$ mvn -Pprod clean install
La clave de este comando es la -Pbandera, que se usa para especificar el perfil que se usará para la compilación.
Si queremos establecer el perfil después de crear el código, podemos usar un argumento de Java VM al iniciar la aplicación. Esto se hace de la siguiente manera:
$ java –jar -Dspring.profiles.active=prod app.jar
Alternativamente, el perfil se puede especificar directamente en el application.propertiesarchivo agregando la línea:
spring.profiles.active=prod  
En cada caso, especificamos prodcomo perfil activo, lo que hace que el application-prod.propertiesarchivo se elija para fines de configuración. Dado que este archivo contiene los valores reales para las ID de seguimiento, estos se insertarán en las plantillas de la compilación de producción y los eventos de los usuarios se rastrearán con éxito en la plataforma de Google.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas