We need to add Unary and Streaming interceptors onto the class XGoogSpannerRequestId that'll then be passed into gRPC call options as intercepts before making each call. You can follow along with the Go implementation per https://github.com/googleapis/google-cloud-go/blob/43c6b83c636503b0d0c45b8845e3516f80dbc86d/spanner/client.go#L437-L442 and then https://github.com/googleapis/google-cloud-go/blob/43c6b83c636503b0d0c45b8845e3516f80dbc86d/spanner/request_id_header.go#L190-L219 and on branch https://github.com/orijtech/java-spanner/tree/x-goog-request-id