public void onApplicationEvent()

in google-cloud-spanner-hibernate-samples/spring-data-jpa-full-sample/src/main/java/com/google/cloud/spanner/sample/opentelemetry/OpenTelemetryInitializer.java [54:96]


  public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
    ConfigurableEnvironment environment = event.getEnvironment();
    boolean enabled =
        Boolean.TRUE.equals(environment.getProperty("open_telemetry.enabled", Boolean.class));
    String project = environment.getProperty("open_telemetry.project");
    String serviceName = environment.getProperty("open_telemetry.service_name");
    if (Strings.isNullOrEmpty(serviceName)) {
      serviceName = "spanner-spring-data-jpa-sample-" + ThreadLocalRandom.current().nextInt();
    }

    if (!enabled || Strings.isNullOrEmpty(project)) {
      return;
    }

    // Enable OpenTelemetry tracing in Spanner.
    SpannerOptions.enableOpenTelemetryTraces();

    if (!hasDefaultCredentials()) {
      // Do not create an OpenTelemetry object if this environment does not have any default
      // credentials configured. This could for example be on local test environments that use
      // the Spanner emulator. This will trigger the use of OpenTelemetry.noop().
      return;
    }

    TraceConfiguration traceConfiguration =
        TraceConfiguration.builder().setProjectId(project).build();
    SpanExporter traceExporter = TraceExporter.createWithConfiguration(traceConfiguration);

    // Create an OpenTelemetry object and register it as the global OpenTelemetry object. This
    // will automatically be picked up by the Spanner libraries and used for tracing.
    this.openTelemetrySdk =
        OpenTelemetrySdk.builder()
            .setTracerProvider(
                SdkTracerProvider.builder()
                    // Set sampling to 'AlwaysOn' in this example. In production, you want to reduce
                    // this to a smaller fraction to limit the number of traces that are being
                    // collected.
                    .setSampler(Sampler.alwaysOn())
                    .setResource(Resource.builder().put("service.name", serviceName).build())
                    .addSpanProcessor(BatchSpanProcessor.builder(traceExporter).build())
                    .build())
            .buildAndRegisterGlobal();
  }