Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Halaman ini menjelaskan cara menetapkan waktu tunggu untuk satu eksekusi pernyataan menggunakan
library klien Spanner. Hal ini dapat digunakan untuk mengganti
konfigurasi waktu tunggu default library klien. Pernyataan gagal dengan
error DEADLINE_EXCEEDED jika pernyataan tidak dapat diselesaikan dalam nilai waktu tunggu
yang ditentukan.
Contoh ini menunjukkan cara menetapkan waktu tunggu untuk satu eksekusi pernyataan di library klien Cloud Spanner.
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;}));}
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2024-11-28 UTC."],[],[]]