检测启动代码
注意
终止支持通知:2027 年 2 月 25 日,Amazon X-Ray 将停止对 Amazon X-Ray SDK 和进程守护程序的支持。2027 年 2 月 25 日之后,您将不会再收到更新或发行版本。有关支持时间表的更多信息,请参阅 X-Ray SDK 和进程守护程序终止支持时间表。我们建议迁移到 OpenTelemetry。有关迁移到 OpenTelemetry 的更多信息,请参阅从 X-Ray 检测迁移到 OpenTelemetry 检测。
适用于 Java 的 X-Ray 开发工具包自动为传入请求创建分段。只要请求在范围内,您就可以使用检测的客户端和记录子分段,而不会出现问题。如果您尝试在启动代码中使用检测的客户端,您将遇到 SegmentNotFoundException。
启动代码在 Web 应用程序的标准请求/响应流之外运行,因此您需要手动创建分段以进行检测。Scorekeep 在其 WebConfig 文件中显示启动代码的检测。Scorekeep 在启动期间调用 SQL 数据库和 Amazon SNS。
默认 WebConfig 类创建通知的 Amazon SNS 订阅。为了提供 X-Ray 开发工具包在使用 Amazon SNS; 客户端时写入的分段,Scorekeep 将在全局记录器上调用 beginSegment 和 endSegment。
例 src/main/java/scorekeep/WebConfig.java - 启动代码中的检测过的 Amazon 开发工具包客户端
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 必须覆盖默认实现并提供在调用客户端时开发工具包要使用的分段。