本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Spring 中的 AOP 和X-Ray SDK for Java
本主题介绍如何使用 X-Ray 开发工具包和 Spring Framework 分析应用程序,而不更改其核心主题。这意味着,现在可通过非侵入性方式分析在 AWS 中远程运行的应用程序。
要启用此功能,您必须执行三个任务。
在春季启用AOP
配置 Spring
您可以使用 Maven 或 Gradle 将 Spring 配置为使用 AOP 分析您的应用程序。
如果您使用 Maven 来生成应用程序,则在 pom.xml
文件中添加以下依赖项。
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-spring</artifactId> <version>2.4.0</version> </dependency>
对于 Gradle,在 build.gradle
文件中添加以下依赖项。
compile 'com.amazonaws:aws-xray-recorder-sdk-spring:2.4.0'
注释您的代码或实施界面
您的类必须使用 @XRayEnabled
注释添加注释,或实现 XRayTraced
interface 这告诉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()); } } }
如果您已正确配置您的应用程序,则应看到应用程序的完整调用堆栈 (从控制器向下至服务调用),如以下控制台屏幕截图所示。
