Awesome
Google Google Cloud Spanner JDBC Client for Java
Java idiomatic client for Google Cloud Spanner JDBC.
Quickstart
If you are using Maven, add this to your pom.xml file:
<!--- {x-version-update-start:google-cloud-spanner-jdbc:released} --><dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-spanner-jdbc</artifactId>
<version>2.25.2</version>
</dependency>
<!--- {x-version-update-end} -->
If you are using Gradle without BOM, add this to your dependencies
<!--- {x-version-update-start:google-cloud-spanner-jdbc:released} -->implementation 'com.google.cloud:google-cloud-spanner-jdbc:2.25.2'
<!--- {x-version-update-end} -->
If you are using SBT, add this to your dependencies
<!--- {x-version-update-start:google-cloud-spanner-jdbc:released} -->libraryDependencies += "com.google.cloud" % "google-cloud-spanner-jdbc" % "2.25.2"
<!--- {x-version-update-end} -->
Authentication
See the Authentication section in the base directory's README.
Authorization
The client application making API calls must be granted authorization scopes required for the desired Google Cloud Spanner JDBC APIs, and the authenticated principal must have the IAM role(s) required to access GCP resources using the Google Cloud Spanner JDBC API calls.
Getting Started
Prerequisites
You will need a Google Cloud Platform Console project with the Google Cloud Spanner JDBC [API enabled][enable-api].
Follow these instructions to get your project set up. You will also need to set up the local development environment by
installing the Google Cloud SDK and running the following commands in command line:
gcloud auth login
and gcloud config set project [YOUR PROJECT ID]
.
Installation and setup
You'll need to obtain the google-cloud-spanner-jdbc
library. See the Quickstart section
to add google-cloud-spanner-jdbc
as a dependency in your code.
About Google Cloud Spanner JDBC
See the Google Cloud Spanner JDBC client library docs to learn how to use this Google Cloud Spanner JDBC Client Library.
Creating a JDBC Connection
The following example shows how to create a JDBC connection to Cloud Spanner and execute a simple query.
String projectId = "my-project";
String instanceId = "my-instance";
String databaseId = "my-database";
try (Connection connection =
DriverManager.getConnection(
String.format(
"jdbc:cloudspanner:/projects/%s/instances/%s/databases/%s",
projectId, instanceId, databaseId))) {
try (Statement statement = connection.createStatement()) {
try (ResultSet rs = statement.executeQuery("SELECT CURRENT_TIMESTAMP()")) {
while (rs.next()) {
System.out.printf(
"Connected to Cloud Spanner at [%s]%n", rs.getTimestamp(1).toString());
}
}
}
}
Connection URL Properties
The Cloud Spanner JDBC driver supports the following connection URL properties. Note that all of
these can also be supplied in a Properties instance that is passed to the
DriverManager#getConnection(String url, Properties properties)
method.
See Supported Connection Properties for a full list of all supported connection properties.
Commonly Used Properties
- credentials (String): URL for the credentials file to use for the connection. If you do not specify any credentials at all, the default credentials of the environment as returned by
GoogleCredentials#getApplicationDefault()
is used. Example:jdbc:cloudspanner:/projects/my-project/instances/my-instance/databases/my-db;credentials=/path/to/credentials.json
- autocommit (boolean): Sets the initial autocommit mode for the connection. Default is true.
- readonly (boolean): Sets the initial readonly mode for the connection. Default is false.
- autoConfigEmulator (boolean): Automatically configure the connection to try to connect to the Cloud Spanner emulator. You do not need to specify any host or port in the connection string as long as the emulator is running on the default host/port (localhost:9010). The instance and database in the connection string will automatically be created if these do not yet exist on the emulator. This means that you do not need to execute any
gcloud
commands on the emulator to create the instance and database before you can connect to it. Example:jdbc:cloudspanner:/projects/test-project/instances/test-instance/databases/test-db;autoConfigEmulator=true
- usePlainText (boolean): Sets whether the JDBC connection should establish an unencrypted connection to a (local) server. This option can only be used when connecting to a local emulator that does not require an encrypted connection, and that does not require authentication. Example:
jdbc:cloudspanner://localhost:9010/projects/test-project/instances/test-instance/databases/test-db;usePlainText=true
- optimizerVersion (String): Sets the default query optimizer version to use for this connection. See also https://cloud.google.com/spanner/docs/query-optimizer/query-optimizer-versions.
Advanced Properties
- minSessions (int): Sets the minimum number of sessions in the backing session pool. Defaults to 100.
- maxSessions (int): Sets the maximum number of sessions in the backing session pool. Defaults to 400.
- numChannels (int): Sets the number of gRPC channels to use. Defaults to 4.
- retryAbortsInternally (boolean): The JDBC driver will by default automatically retry aborted transactions internally. This is done by keeping track of all statements and the results of these during a transaction, and if the transaction is aborted by Cloud Spanner, it will replay the statements on a new transaction and compare the results with the initial attempt. Disable this option if you want to handle aborted transactions in your own application.
- autocommit_dml_mode (string): Determines the transaction type that is used to execute
DML statements when the connection is
in auto-commit mode. The following values are supported:
- TRANSACTIONAL (default): Uses atomic read/write transactions.
- PARTITIONED_NON_ATOMIC: Use Partitioned DML for DML statements in auto-commit mode. Use this mode to execute DML statements that exceed the transaction mutation limit in Spanner.
- TRANSACTIONAL_WITH_FALLBACK_TO_PARTITIONED_NON_ATOMIC: Execute DML statements using atomic read/write transactions. If this fails because the mutation limit on Spanner has been exceeded, the DML statement is retried using a Partitioned DML transaction.
- auto_batch_dml (boolean): Automatically buffer DML statements and execute them as one batch, instead of executing them on Spanner directly. The buffered DML statements are executed on Spanner in one batch when a query is executed, or when the transaction is committed. This option can for example be used in combination with Hibernate to automatically group more (small) DML statements into one batch.
- oauthToken (string): A valid pre-existing OAuth token to use for authentication for this connection. Setting this property will take precedence over any value set for a credentials file.
- lenient (boolean): Enable this to force the JDBC driver to ignore unknown properties in the connection URL. Some applications automatically add additional properties to the URL that are not recognized by the JDBC driver. Normally, the JDBC driver will reject this, unless
lenient
mode is enabled.
For a full list of supported connection properties, see Supported Connection Properties.
Jar with Dependencies
A single jar with all dependencies can be downloaded from https://repo1.maven.org/maven2/com/google/cloud/google-cloud-spanner-jdbc/latest
or be built with the command mvn package
(select the jar that is named google-cloud-spanner-jdbc-<version>-single-jar-with-dependencies.jar
).
Creating a Shaded Jar
A jar with all dependencies included is automatically generated when you execute mvn package
.
The dependencies in this jar are not shaded. To create a jar with shaded dependencies you must
activate the shade
profile like this:
mvn package -Pshade
Troubleshooting
To get help, follow the instructions in the shared Troubleshooting document.
Supported Java Versions
Java 8 or above is required for using this client.
Google's Java client libraries, Google Cloud Client Libraries and Google Cloud API Libraries, follow the Oracle Java SE support roadmap (see the Oracle Java SE Product Releases section).
For new development
In general, new feature development occurs with support for the lowest Java LTS version covered by Oracle's Premier Support (which typically lasts 5 years from initial General Availability). If the minimum required JVM for a given library is changed, it is accompanied by a semver major release.
Java 11 and (in September 2021) Java 17 are the best choices for new development.
Keeping production systems current
Google tests its client libraries with all current LTS versions covered by Oracle's Extended Support (which typically lasts 8 years from initial General Availability).
Legacy support
Google's client libraries support legacy versions of Java runtimes with long term stable libraries that don't receive feature updates on a best efforts basis as it may not be possible to backport all patches.
Google provides updates on a best efforts basis to apps that continue to use Java 7, though apps might need to upgrade to current versions of the library that supports their JVM.
Where to find specific information
The latest versions and the supported Java versions are identified on
the individual GitHub repository github.com/GoogleAPIs/java-SERVICENAME
and on google-cloud-java.
Versioning
This library follows Semantic Versioning.
Contributing
Contributions to this library are always welcome and highly encouraged.
See CONTRIBUTING for more information how to get started.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See Code of Conduct for more information.
License
Apache 2.0 - See LICENSE for more information.
CI Status
Java Version | Status |
---|---|
Java 8 | |
Java 8 OSX | |
Java 8 Windows | |
Java 11 |
Java is a registered trademark of Oracle and/or its affiliates.