分析启动代码 - Amazon X-Ray
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

分析启动代码

适用于 Java 的 X-Ray 开发工具包自动为传入请求创建分段。只要请求在范围内,您就可以使用分析的客户端和记录子分段,而不会出现问题。如果您尝试在启动代码中使用分析的客户端,您将看到 SegmentNotFoundException

启动代码在 Web 应用程序的标准请求/响应流之外运行,因此您需要手动创建分段以进行分析。Scoreep 在其WebConfig文件。Scoreate 在启动期间调用 SQL 数据库和 Amazon SNS。

默认WebConfig类创建通知的 Amazon SNS 订阅。为了提供 X-Ray 开发工具包在使用 Amazon SNS 客户端时写入的分段,Scoreate 将在beginSegmentendSegment在全局记录器上。

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();

InRdsWebConfig(Scoreep 在连接 Amazon RDS 数据库时使用的),配置还为 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 必须覆盖默认实现并提供在调用客户端时开发工具包要使用的分段。