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
Para habilitar a AOP no spring
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
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@XRayEnabledserã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.