Datastore Mode
Cloud Firestore Datastore Instance
There can only be one Cloud Firestore instance associated with a single project. The Datastore instance is automatically created when you enable the API:
There can only be one Datastore instance associated with a single project. The Cloud Firestore in Datastore instance is automatically created when you enable the API:
Enable API
gcloud services enable datastore.googleapis.com
Data Schema
Because Cloud Firestore is a NoSQL database, you do not need to explicitly create tables, define data schema, etc. Simply use the API to store new documents, and perform CRUD operations.
Spring Data Datastore
The easiest way to access Datastore is using Spring Cloud GCP's Spring Data Datastore starter. This starter provides full Spring Data support for Datastore while implementing idiomatic access patterns.
Spring Data Feature
Supported
ORM
✅
Declarative Transaction
✅
Repository
✅
REST Repository
✅
Query methods
✅
Query annotation
✅
Pagination
✅
Events
✅
Auditing
✅
Dependency
Add the Spring Data Datastore starter:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
</dependency>
Configuration
There is no explicit configuration required if you use the automatic authentication and project ID detection. I.e., if you already logged in locally with gcloud
command line, then it'll automatically use Datastore from the project you configured in gcloud
.
ORM
Spring Data Cloud Datastore allows you to map domain POJOs to Datastore documents via annotations. Read the Spring Data Datastore reference documentation for details
@Entity
class Order {
@Id
private Long id;
private String description;
private LocalDateTime timestamp;
private List<OrderItem> items;
// Getters and setters ...
}
@Entity
class OrderItem {
private String description;
private Long quantity;
// Getters and setters ...
}
Because Datastore is a document-oriented NoSQL database, you can have nested structure, you can establish parent-children relationships without complicated foreign keys.
Repository
Use Spring Data repository to quickly get CRUD access to the Datastore.
@Repository
interface OrderRepository extends DatastoreRepository<Order, Long> {
}
In a business logic service you can utilize the repositories:
@Service
class OrderService {
private final OrderRepository orderRepository;
OrderService(OrderRepository orderRepository) {
this.orderRepository = orderRepository;
}
@Transactional
Order createOrder(Order order) {
// Set the creation time
order.setTimestamp(LocalDateTime.now());
// Children are saved in cascade.
return orderRepository.save(order);
}
}
Rest Repository
Spring Data Rest can expose a Spring Data repository directly on a RESTful endpoint, and rendering the payload as JSON with HATEOAS format. It supports common access patterns like pagination.
Add Spring Data Rest starter:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
@RepositoryRestResource
interface OrderRepository extends DatastoreRepository<Order, String> {
}
To access the endpoint for Order:
curl http://localhost:8080/orders
Samples
Last updated
Was this helpful?