View a markdown version of this page

AOP com Spring e o X-Ray SDK for Java - AWS X-Ray

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

AOP com Spring e o X-Ray SDK for Java

nota

X-Ray SDK/Daemon Aviso de manutenção — Em 25 de fevereiro de 2026, AWS X-Ray SDKs/Daemon ele entrará no modo de manutenção, onde AWS limitará os lançamentos do X-Ray SDK e do Daemon para tratar apenas de problemas de segurança. Para obter mais informações sobre a linha do tempo do suporte, consulte Cronograma de suporte do X-Ray SDK e do Daemon Support. Recomendamos migrar para o. OpenTelemetry Para obter mais informações sobre como migrar para OpenTelemetry, consulte Migração da X-Ray instrumentação para a instrumentação. OpenTelemetry

Este tópico descreve como usar o X-Ray SDK e o Spring Framework para instrumentar seu aplicativo sem alterar sua lógica principal. Isso significa que agora existe uma forma não invasiva de instrumentar seus aplicativos executados remotamente. AWS

Configurar o Spring

Você pode usar o Maven ou o Gradle para configurar o Spring para usar AOP para instrumentar seu aplicativo.

Se você usar o Maven para compilar seu aplicativo, adicione a dependência a seguir no arquivo pom.xml.

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

Para o Gradle, adicione a seguinte dependência no arquivo build.gradle.

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

Configurar o Spring Boot

Além da dependência do Spring descrita na seção anterior, se você estiver usando o Spring Boot, adicione a seguinte dependência se ela ainda não estiver no 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'

Adicionar um filtro de rastreamento ao aplicativo

Adicione um Filter à classe WebConfig. Passe o nome do segmento para o construtor AWSXRayServletFilter como uma string. Para obter mais informações sobre filtros de rastreamento e instrumentar solicitações de entrada, consulte Rastrear solicitações recebidas com o X-Ray SDK para Java.

exemplo 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"); } }

Suporta a Jakarta

O Spring 6 usa Jakarta em vez de Javax na Enterprise Edition. Para dar suporte a esse novo namespace, X-Ray criou um conjunto paralelo de classes que residem em seu próprio namespace de Jacarta.

Para as classes de filtro, substitua javax por jakarta. Ao configurar uma estratégia de nomeação de segmentos, adicione jakarta antes do nome da classe da estratégia, como no seguinte exemplo:

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")); } }

Anotar o código ou implementar uma interface

Anote suas classes com a anotação @XRayEnabled ou implemente a interface XRayTraced. Isso faz com que o sistema AOP envolva as funções da classe afetada para X-Ray instrumentação.

Ativando X-Ray em seu aplicativo

Para ativar o X-Ray rastreamento em seu aplicativo, seu código deve estender a classe abstrata BaseAbstractXRayInterceptor substituindo os métodos a seguir.

  • generateMetadata: esta função permite a personalização dos metadados anexados ao rastreamento da função atual. Por padrão, o nome de classe da função de execução é registrada nos metadados. Você pode adicionar mais dados se precisar de informações adicionais.

  • xrayEnabledClasses: esta função está vazia e deve permanecer assim. Ela serve como host para um pointcut, instruindo o interceptor sobre quais métodos devem ser encapsulados. Defina o pointcut especificando quais das classes que estão anotadas com @XRayEnabled serão rastreadas. A seguinte instrução de pointcut informa ao interceptor para encapsular todos os beans do controlador anotados com a anotação @XRayEnabled.

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

Se seu projeto estiver usando o Spring Data JPA, considere a possibilidade de estender de AbstractXRayInterceptor em vez de BaseAbstractXRayInterceptor.

Exemplo

O código a seguir estende a classe abstrata 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() {} }

O código a seguir é uma classe 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()); } } }

Se você tiver configurado seu aplicativo corretamente, deverá ver a pilha de chamadas completa do aplicativo, do controlador até as chamadas de serviço, conforme mostrado na captura de tela do console a seguir.

A pilha de chamadas completa.