View a markdown version of this page

检测启动代码 - AWS X-Ray

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

检测启动代码

注意

X-Ray SDK/Daemon 维护通知 — 2026 年 2 月 25 日 AWS X-Ray SDKs/Daemon 将进入维护模式, AWS 将限制 X-Ray SDK 和 Daemon 版本仅用于解决安全问题。有关支持时间表的更多信息,请参阅 X-Ray SDK 和 Daemon Support 时间表。我们建议迁移到 OpenTelemetry。有关迁移到仪器的更多信息 OpenTelemetry,请参阅从 X-Ray 仪器迁移到 OpenTelemetry 仪器

适用于 Java 的 X-Ray SDK 会自动为传入的请求创建区段。只要请求在范围内,您就可以使用检测的客户端和记录子分段,而不会出现问题。但是,如果你尝试在启动代码中使用经过检测的客户端,你会得SegmentNotFoundException到.

启动代码在 Web 应用程序的标准 request/response 流程之外运行,因此您需要手动创建区段来对其进行检测。Scorekeep 在其 WebConfig 文件中显示启动代码的检测。Scorekeep 在启动期间调用 SQL 数据库和 Amazon SNS。

该图显示了连接到 Scorekeep-init、连接到 SQL 数据库和 SNS 的客户端。

默认 WebConfig 类创建通知的 Amazon SNS 订阅。为了在使用 Amazon SNS 客户端时为 X-Ray 软件开发工具包提供写入的区段,Scorekeeep 在全局记录器endSegment上调用 beginSegment and。

src/main/java/scorekeep/WebConfig.java — 仪器化 AWS 启动代码中的 SDK 客户端
AWSXRay.beginSegment("Scorekeep-init"); if ( System.getenv("NOTIFICATION_EMAIL") != null ){ try { Sns.createSubscription(); } catch (Exception e ) { logger.warn("Failed to create subscription for email "+ System.getenv("NOTIFICATION_EMAIL")); } } AWSXRay.endSegment();

在连接 Amazon RDS 数据库时 Scorekeep 使用的 RdsWebConfig 中,配置还为 Hibernate 在启动期间应用数据库架构时使用的 SQL 客户端创建一个分段。

src/main/java/scorekeep/RdsWebConfig.java — 启动代码中装有检测的 SQL 数据库客户端
@PostConstruct public void schemaExport() { EntityManagerFactoryImpl entityManagerFactoryImpl = (EntityManagerFactoryImpl) localContainerEntityManagerFactoryBean.getNativeEntityManagerFactory(); SessionFactoryImplementor sessionFactoryImplementor = entityManagerFactoryImpl.getSessionFactory(); StandardServiceRegistry standardServiceRegistry = sessionFactoryImplementor.getSessionFactoryOptions().getServiceRegistry(); MetadataSources metadataSources = new MetadataSources(new BootstrapServiceRegistryBuilder().build()); metadataSources.addAnnotatedClass(GameHistory.class); MetadataImplementor metadataImplementor = (MetadataImplementor) metadataSources.buildMetadata(standardServiceRegistry); SchemaExport schemaExport = new SchemaExport(standardServiceRegistry, metadataImplementor); AWSXRay.beginSegment("Scorekeep-init"); schemaExport.create(true, true); AWSXRay.endSegment(); }

SchemaExport 自动运行并使用 SQL 客户端。由于对客户端进行检测,Scorekeep 必须覆盖默认实现并提供在调用客户端时开发工具包要使用的分段。