Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Auf dieser Seite wird beschrieben, wie Sie mit den Spanner-Clientbibliotheken ein Zeitlimit für die Ausführung einer einzelnen Anweisung festlegen. So können Sie die Standardzeitüberschreitungskonfiguration der Clientbibliothek überschreiben. Die Anweisung schlägt mit einem DEADLINE_EXCEEDED-Fehler fehl, wenn sie nicht innerhalb des angegebenen Zeitlimits abgeschlossen werden kann.
In diesen Beispielen wird gezeigt, wie Sie in der Cloud Spanner-Clientbibliothek ein Zeitlimit für die Ausführung einer einzelnen Anweisung festlegen.
Go
import("context""fmt""io""time""cloud.google.com/go/spanner""google.golang.org/grpc/codes")funcsetStatementTimeout(wio.Writer,dbstring)error{client,err:=spanner.NewClient(context.Background(),db)iferr!=nil{returnerr}deferclient.Close()_,err=client.ReadWriteTransaction(context.Background(),func(ctxcontext.Context,txn*spanner.ReadWriteTransaction)error{// Create a context with a 60-second timeout and apply this timeout to the insert statement.ctxWithTimeout,cancel:=context.WithTimeout(context.Background(),60*time.Second)defercancel()stmt:=spanner.Statement{SQL:`INSERT Singers (SingerId, FirstName, LastName) VALUES (39, 'George', 'Washington')`,}rowCount,err:=txn.Update(ctxWithTimeout,stmt)// Get the error code from the error. This function returns codes.OK if err == nil.code:=spanner.ErrCode(err)ifcode==codes.DeadlineExceeded{fmt.Fprintf(w,"Insert statement timed out.\n")}elseifcode==codes.OK{fmt.Fprintf(w,"%d record(s) inserted.\n",rowCount)}else{fmt.Fprintf(w,"Insert statement failed with error %v\n",err)}returnerr})iferr!=nil{returnerr}returnnil}
Java
staticvoidexecuteSqlWithTimeout(){// TODO(developer): Replace these variables before running the sample.StringprojectId="my-project";StringinstanceId="my-instance";StringdatabaseId="my-database";try(Spannerspanner=SpannerOptions.newBuilder().setProjectId(projectId).build().getService()){DatabaseClientclient=spanner.getDatabaseClient(DatabaseId.of(projectId,instanceId,databaseId));executeSqlWithTimeout(client);}}staticvoidexecuteSqlWithTimeout(DatabaseClientclient){CallContextConfiguratorconfigurator=newCallContextConfigurator(){public<ReqT,RespT>ApiCallContextconfigure(ApiCallContextcontext,ReqTrequest,MethodDescriptor<ReqT,RespT>method){// DML uses the ExecuteSql RPC.if(method==SpannerGrpc.getExecuteSqlMethod()){// NOTE: You can use a GrpcCallContext to set a custom timeout for a single RPC// invocation. This timeout can however ONLY BE SHORTER than the default timeout// for the RPC. If you set a timeout that is longer than the default timeout, then// the default timeout will be used.returnGrpcCallContext.createDefault().withCallOptions(CallOptions.DEFAULT.withDeadlineAfter(60L,TimeUnit.SECONDS));}// Return null to indicate that the default should be used for other methods.returnnull;}};// Create a context that uses the custom call configuration.Contextcontext=Context.current().withValue(SpannerOptions.CALL_CONTEXT_CONFIGURATOR_KEY,configurator);// Run the transaction in the custom context.context.run(()->
client.readWriteTransaction().<long[]>run(transaction->{Stringsql="INSERT INTO Singers (SingerId, FirstName, LastName)\n"+"VALUES (20, 'George', 'Washington')";longrowCount=transaction.executeUpdate(Statement.of(sql));System.out.printf("%d record inserted.%n",rowCount);returnnull;}));}
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Schwer verständlich","hardToUnderstand","thumb-down"],["Informationen oder Beispielcode falsch","incorrectInformationOrSampleCode","thumb-down"],["Benötigte Informationen/Beispiele nicht gefunden","missingTheInformationSamplesINeed","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-01-30 (UTC)."],[],[]]