檢測啟動程式碼 - AWS X-Ray

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

檢測啟動程式碼

注意

End-of-support通知 – 在 2027 年 2 月 25 日, AWS X-Ray 將停止支援 AWS X-Ray SDKs 和協助程式。2027 年 2 月 25 日之後,您將不再收到更新或版本。如需支援時間軸的詳細資訊,請參閱 X-Ray SDK 和協助程式終止支援時間表。建議您遷移至 OpenTelemetry。如需遷移至 OpenTelemetry 的詳細資訊,請參閱從 X-Ray 檢測遷移至 OpenTelemetry 檢測

適用於 Java 的 X-Ray 開發套件會自動為傳入的請求建立區段。只要請求是在範圍內,您即可使用經檢測的用戶端並記錄子區段,而不會出現問題。如果您嘗試在啟動程式碼中使用經檢測的用戶端,則會收到 SegmentNotFoundException

啟動程式碼會在 Web 應用程式的標準請求/回應流程之外執行,因此您需要手動建立區段以檢測起始程式碼。Scorekeep 會在其 WebConfig 檔案中顯示啟動程式碼的檢測。Scorekeep 會在啟動期間呼叫 SQL 資料庫和 Amazon SNS。

Diagram showing client requests to Scorekeeper-init, which connects to SQL database and SNS.

預設WebConfig類別會為通知建立 Amazon SNS 訂閱。若要在使用 Amazon SNS 用戶端時提供 X-Ray 開發套件寫入的區段,Scorekeep 會在全域記錄器endSegment上呼叫 beginSegment和 。

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

在 Scorekeep 在連接 Amazon RDS 資料庫時使用RdsWebConfig的 中,組態也會為 SQL 用戶端建立區段,供 Hibernate 在啟動期間套用資料庫結構描述時使用。

範例 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 必須覆寫預設的實作,並提供呼叫用戶端時軟體開發套件使用的區段。