Skip to content

Commit ff3d212

Browse files
docs: Add snippet for Repeatable Read configuration at client and transaction (#3908)
* docs: Add snippet for Repeatable Read configuration at client and transaction level. * docs: Fix checkstyle violations --------- Co-authored-by: Sakthivel Subramanian <[email protected]>
1 parent 5f924b7 commit ff3d212

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

samples/snippets/src/main/java/com/example/spanner/SpannerSample.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@
3232
import com.google.cloud.spanner.KeyRange;
3333
import com.google.cloud.spanner.KeySet;
3434
import com.google.cloud.spanner.Mutation;
35+
import com.google.cloud.spanner.Options;
3536
import com.google.cloud.spanner.ReadOnlyTransaction;
3637
import com.google.cloud.spanner.ResultSet;
3738
import com.google.cloud.spanner.Spanner;
3839
import com.google.cloud.spanner.SpannerBatchUpdateException;
3940
import com.google.cloud.spanner.SpannerException;
4041
import com.google.cloud.spanner.SpannerExceptionFactory;
4142
import com.google.cloud.spanner.SpannerOptions;
43+
import com.google.cloud.spanner.SpannerOptions.Builder.DefaultReadWriteTransactionOptions;
4244
import com.google.cloud.spanner.Statement;
4345
import com.google.cloud.spanner.Struct;
4446
import com.google.cloud.spanner.TimestampBound;
@@ -71,6 +73,7 @@
7173
import com.google.spanner.admin.database.v1.RestoreDatabaseRequest;
7274
import com.google.spanner.admin.database.v1.RestoreInfo;
7375
import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions;
76+
import com.google.spanner.v1.TransactionOptions.IsolationLevel;
7477
import java.math.BigDecimal;
7578
import java.time.Instant;
7679
import java.time.ZoneId;
@@ -1552,6 +1555,47 @@ static void queryWithQueryOptions(DatabaseClient dbClient) {
15521555
}
15531556
// [END spanner_query_with_query_options]
15541557

1558+
// [START spanner_isolation_level_settings]
1559+
static void isolationLevelSetting(DatabaseId db) {
1560+
// The isolation level specified at the client-level will be applied to all
1561+
// RW transactions.
1562+
DefaultReadWriteTransactionOptions transactionOptions =
1563+
DefaultReadWriteTransactionOptions.newBuilder()
1564+
.setIsolationLevel(IsolationLevel.SERIALIZABLE)
1565+
.build();
1566+
SpannerOptions options =
1567+
SpannerOptions.newBuilder()
1568+
.setDefaultTransactionOptions(transactionOptions)
1569+
.build();
1570+
Spanner spanner = options.getService();
1571+
DatabaseClient dbClient = spanner.getDatabaseClient(db);
1572+
dbClient
1573+
// The isolation level specified at the transaction-level takes precedence
1574+
// over the isolation level configured at the client-level.
1575+
.readWriteTransaction(Options.isolationLevel(IsolationLevel.REPEATABLE_READ))
1576+
.run(transaction -> {
1577+
// Read an AlbumTitle.
1578+
String selectSql =
1579+
"SELECT AlbumTitle from Albums WHERE SingerId = 1 and AlbumId = 1";
1580+
ResultSet resultSet = transaction.executeQuery(Statement.of(selectSql));
1581+
String title = null;
1582+
while (resultSet.next()) {
1583+
title = resultSet.getString("AlbumTitle");
1584+
}
1585+
System.out.printf("Current album title: %s\n", title);
1586+
1587+
// Update the title.
1588+
String updateSql =
1589+
"UPDATE Albums "
1590+
+ "SET AlbumTitle = 'New Album Title' "
1591+
+ "WHERE SingerId = 1 and AlbumId = 1";
1592+
long rowCount = transaction.executeUpdate(Statement.of(updateSql));
1593+
System.out.printf("%d record updated.\n", rowCount);
1594+
return null;
1595+
});
1596+
}
1597+
// [END spanner_isolation_level_settings]
1598+
15551599
// [START spanner_create_backup]
15561600
static void createBackup(DatabaseAdminClient dbAdminClient, String projectId, String instanceId,
15571601
String databaseId, String backupId, Timestamp versionTime) {
@@ -2108,6 +2152,9 @@ static void run(
21082152
case "querywithqueryoptions":
21092153
queryWithQueryOptions(dbClient);
21102154
break;
2155+
case "isolationlevelsettings":
2156+
isolationLevelSetting(database);
2157+
break;
21112158
case "createbackup":
21122159
createBackup(dbAdminClient, database.getInstanceId().getProject(),
21132160
database.getInstanceId().getInstance(), database.getDatabase(),
@@ -2218,6 +2265,7 @@ static void printUsageAndExit() {
22182265
System.err.println(" SpannerExample querywithtimestampparameter my-instance example-db");
22192266
System.err.println(" SpannerExample clientwithqueryoptions my-instance example-db");
22202267
System.err.println(" SpannerExample querywithqueryoptions my-instance example-db");
2268+
System.err.println(" SpannerExample isolationlevelsettings my-instance example-db");
22212269
System.err.println(" SpannerExample createbackup my-instance example-db");
22222270
System.err.println(" SpannerExample listbackups my-instance example-db");
22232271
System.err.println(" SpannerExample listbackupoperations my-instance example-db backup-id");

0 commit comments

Comments
 (0)