适用于 Java 的 Spring 的 AOP 和 X-Ray 开发工具包 - Amazon X-Ray
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 Java 的 Spring 的 AOP 和 X-Ray 开发工具包

本主题介绍如何使用 X-Ray 开发工具包和 Spring Framework 分析应用程序,而不更改其核心主题。这意味着,现在可通过非侵入性方式分析Amazon。

配置 Spring

您可以使用 Maven 或 Gradle 将 Spring 配置为使用 AOP 分析您的应用程序。

如果您使用 Maven 来生成应用程序,则在 pom.xml 文件中添加以下依赖项。

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

对于 Gradle,在 build.gradle 文件中添加以下依赖项。

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

将跟踪过滤器添加到应用程序

添加Filter到您的WebConfig类。将分段名称传递到 AWSXRayServletFilter构造函数作为字符串。有关跟踪筛选器和分析传入请求的更多信息,请参阅使用适用于 Java 的 X-Ray 开发工具包跟踪传入请求

例 src/main/java/myapp/WebConfig.java-Spring

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

对代码添加注释或实现接口

您的类必须使用@XRayEnabled注释,或实现XRayTraced接口。这将告知 AOP 系统包装受影响类的函数以进行 X-Ray 分析。

激活应用程序中的 X-Ray

要在您的应用程序中激活 X-Ray 跟踪,您的代码必须通过覆盖以下方法来AbstractXRayInterceptor通过覆盖以下方法。

  • generateMetadata- 此函数允许对附加到当前函数跟踪的元数据进行自定义。默认情况下,执行函数的类名将记录在元数据中。如果您需要其他信息,则可添加更多数据。

  • xrayEnabledClasses- 此函数为空,并且应保持此状态。它用作告知拦截程序要包装的方法的指示的主机。通过指定使用@XRayEnabled来跟踪。以下指示语句告知拦截程序包装使用 @XRayEnabled 注释添加注释的所有控制器 bean。

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

Example

以下代码扩展抽象类AbstractXRayInterceptor

@Aspect @Component public class XRayInspector extends AbstractXRayInterceptor { @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() {} }

以下代码是一个将由 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()); } } }

如果您已正确配置您的应用程序,则应看到应用程序的完整调用堆栈 (从控制器向下至服务调用),如以下控制台屏幕截图所示。


        完整的调用堆栈。