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

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

檢測啟動程式碼

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

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

預設的WebConfig類別會建立通知的 Amazon SNS 訂。為了在使用 Amazon SNS 用户端時提供 X-Ray 開發套件寫入的區段,Scorement 會在使用 Amazon SNS 用户端時呼叫beginSegmentendSegment在全局記錄器上。

範例 src/main/java/scorekeep/WebConfig.java— 檢測AWS起始程式碼中經開發套件用
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在連線 Amazon RDS 資料庫時 Scoreep 所使用的中,組態也會為 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 必須覆寫預設的實作,並提供呼叫用戶端時軟體開發套件使用的區段。