View a markdown version of this page

AOP con Spring y el X-Ray SDK para Java - AWS X-Ray

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

AOP con Spring y el X-Ray SDK para Java

nota

X-Ray SDK/Daemon Aviso de mantenimiento: el 25 de febrero de 2026, AWS X-Ray SDKs/Daemon entrará en modo de mantenimiento, en el que AWS se limitarán las versiones de X-Ray SDK y Daemon para abordar únicamente los problemas de seguridad. Para obtener más información sobre la cronología del soporte, consulte Cronología de X-Ray SDK y Daemon Support. Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte Migración de una X-Ray instrumentación a otra. OpenTelemetry

En este tema se describe cómo usar el X-Ray SDK y Spring Framework para instrumentar tu aplicación sin cambiar su lógica principal. Esto significa que ahora existe una forma no invasiva de instrumentar las aplicaciones que se ejecutan de forma remota. AWS

Configuración de Spring

Puede utilizar Maven o Gradle para configurar Spring para que utilice AOP con el fin de instrumentar la aplicación.

Si utiliza Maven para compilar la aplicación, añada la siguiente dependencia al archivo pom.xml.

<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-spring</artifactId> <version>2.11.0</version> </dependency>

Para Gradle, añada la siguiente dependencia al archivo build.gradle.

compile 'com.amazonaws:aws-xray-recorder-sdk-spring:2.11.0'

Configuración de Spring Boot

Además de la dependencia de Spring descrita en la sección anterior, si utiliza Spring Boot, añada la siguiente dependencia si aún no está en su classpath.

Maven:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.5.2</version> </dependency>

Gradle:

compile 'org.springframework.boot:spring-boot-starter-aop:2.5.2'

Adición de un filtro de rastreo a la aplicación

Añada un Filter a su clase WebConfig. Pase el nombre del segmento al constructor AWSXRayServletFilter como cadena. Para obtener más información sobre los filtros de rastreo y la instrumentación de las solicitudes entrantes, consulte Rastreo de las solicitudes entrantes con el SDK de X-Ray para Java.

ejemplo src/main/java/myapp/WebConfig.java - primavera
package myapp; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import javax.servlet.Filter; import com.amazonaws.xray.javax.servlet.AWSXRayServletFilter; @Configuration public class WebConfig { @Bean public Filter TracingFilter() { return new AWSXRayServletFilter("Scorekeep"); } }

Compatibilidad con Jakarta

Spring 6 usa Jakarta en lugar de Javax para su Enterprise Edition. Para respaldar este nuevo espacio de nombres, X-Ray ha creado un conjunto paralelo de clases que viven en su propio espacio de nombres de Yakarta.

Para las clases de filtro, sustituya javax por jakarta. Al configurar una estrategia de nomenclatura de segmentos, agregue jakarta antes del nombre de la clase de estrategia de nomenclatura, como en el siguiente ejemplo:

package myapp; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import jakarta.servlet.Filter; import com.amazonaws.xray.jakarta.servlet.AWSXRayServletFilter; import com.amazonaws.xray.strategy.jakarta.SegmentNamingStrategy; @Configuration public class WebConfig { @Bean public Filter TracingFilter() { return new AWSXRayServletFilter(SegmentNamingStrategy.dynamic("Scorekeep")); } }

Anotación del código o implementación de una interfaz

Las clases deben anotarse con la anotación @XRayEnabled o deben implementar la interfaz de XRayTraced. Esto le indica al sistema AOP que incluya las funciones de la clase afectada para su instrumentación. X-Ray

Activar X-Ray en tu aplicación

Para activar X-Ray el rastreo en su aplicación, su código debe extender la clase abstracta BaseAbstractXRayInterceptor anulando los siguientes métodos.

  • generateMetadata: esta función permite la personalización de los metadatos adjuntados al rastreo de la función actual. De forma predeterminada, el nombre de clase de la función que se ejecuta se registra en los metadatos. Puede añadir más datos si necesita más información.

  • xrayEnabledClasses: esta función está vacía, y debe seguir así. Sirve para alojar un conjunto de puntos de unión (pointcut) que indica al interceptor los métodos que debe encapsular. Defina el pointcut especificando las clases que se han anotado con @XRayEnabled que se deben rastrear. La siguiente instrucción pointcut indica al interceptor que encapsule todos los beans del controlador anotados con la anotación @XRayEnabled.

    @Pointcut(“@within(com.amazonaws.xray.spring.aop.XRayEnabled) && bean(*Controller)”)

Si su proyecto utiliza Spring Data JPA, considere la posibilidad de ampliar desde AbstractXRayInterceptor en lugar de BaseAbstractXRayInterceptor.

Ejemplo

El siguiente código extiende la clase abstracta BaseAbstractXRayInterceptor.

@Aspect @Component public class XRayInspector extends BaseAbstractXRayInterceptor { @Override protected Map<String, Map<String, Object>> generateMetadata(ProceedingJoinPoint proceedingJoinPoint, Subsegment subsegment) throws Exception { return super.generateMetadata(proceedingJoinPoint, subsegment); } @Override @Pointcut("@within(com.amazonaws.xray.spring.aop.XRayEnabled) && bean(*Controller)") public void xrayEnabledClasses() {} }

El siguiente código es una clase que será instrumentada por. X-Ray

@Service @XRayEnabled public class MyServiceImpl implements MyService { private final MyEntityRepository myEntityRepository; @Autowired public MyServiceImpl(MyEntityRepository myEntityRepository) { this.myEntityRepository = myEntityRepository; } @Transactional(readOnly = true) public List<MyEntity> getMyEntities(){ try(Stream<MyEntity> entityStream = this.myEntityRepository.streamAll()){ return entityStream.sorted().collect(Collectors.toList()); } } }

Si ha configurado correctamente la aplicación, debe ver la pila de llamadas completa de la aplicación, desde el controlador hasta las llamadas a los servicios, tal y como se muestra en la siguiente captura de pantalla de la consola.

La pila de llamadas completa.