DEV Community

Cover image for Setup Azure Cosmos DB for Gremlin in Spring Boot Java
Jonathan U
Jonathan U

Posted on

Setup Azure Cosmos DB for Gremlin in Spring Boot Java

Azure Cosmos DB is a fully managed NoSQL, relational, and vector database for modern app development. It handles all the database administration with automatic management, updates, and patching. It also handles capacity management with serverless and automatic scaling options to match capacity and demand of your application.

Azure Cosmos DB has multiple database APIs, including NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin, and Table. This guide will focus on setting up Azure Cosmos DB with the Gremlin API to store and access data from a Spring Boot application in Java.

The API for Gremlin is built based on Apache TinkerPop, a graph computing framework that uses the Gremlin query language.

Prerequisites

  • An Azure Cosmos DB account
    • Gremlin Database and Collection Created
  • JDK 1.7+, but we'll use JDK 21
  • Maven

In this example, I have a Cosmos DB Gremlin account with a database called graphdb and a collection called Persons.

Spring Boot Starter

Next step is to create a spring boot project using the Spring Initializr tool with the following options:

  • Java 21
  • Maven
  • Jar Packaging

Add Spring Web as a dependency, then create.

Once the spring boot project has been created, add the gremlin-driver dependency to the pom.xml:

<dependency>
    <groupId>org.apache.tinkerpop</groupId>
    <artifactId>gremlin-driver</artifactId>
    <version>3.7.2</version>
</dependency>
Enter fullscreen mode Exit fullscreen mode

Make sure everything is installed and the build succeeds:

mvn clean install
Enter fullscreen mode Exit fullscreen mode

Navigate to src/main/resources/application.yml. If application.yml doesn't exist, create it.
Add the following:

cosmosdb:
  host: ${GREMLIN_HOST} #cosmos db host (ex: <account-name>.gremlin.cosmos.azure.com)
  key: ${GREMLIN_KEY} #cosmos db key
  port: 443
  database: graphdb #database name
  collection: Persons #collection name
Enter fullscreen mode Exit fullscreen mode

In the directory where your SpringBootApplication class is, create a class called GremlinConfig with the following code:

@Configuration
public class GremlinConfig {

    @Value("${cosmosdb.host}")
    private String gremlinHost;
    @Value("${cosmosdb.key}")
    private String gremlinKey;
    @Value("${cosmosdb.port}")
    private int port;
    @Value("${cosmosdb.database}")
    private String database;
    @Value("${cosmosdb.collection}")
    private String collection;

    @Bean
    public Client gremlinClient() {
        String username = "/dbs/%s/colls/%s".formatted(database, collection);
        Cluster cluster = Cluster.build()
                .addContactPoint(gremlinHost)
                .port(port)
                .credentials(username, gremlinKey)
                .enableSsl(true)
                .serializer(Serializers.GRAPHSON_V2)
                .create();
        return cluster.connect();
    }
}
Enter fullscreen mode Exit fullscreen mode

This creates a gremlin client bean, using the values from application.yml. The client communicates with your gremlin database and can be used throughout your application.

Next, create a class called PersonsController. This will be the REST Controller with a GET endpoint that will retrieve a Vertex given an id.

@RestController
public class PersonsController {

    private final Client client;

    public PersonsController(Client client) {
        this.client = client;
    }

    @GetMapping("/{name}")
    public String getPerson(@PathVariable("name") String name) {
        ResultSet results = client.submit("g.V('%s')".formatted(name));
        Result result = results.one();
        return result.getString();
    }
}
Enter fullscreen mode Exit fullscreen mode

Once you've added this, you can test to see if everything works. After you define the GREMLIN_HOST and GREMLIN_KEY environment variables, run the spring boot application.

Assuming you have a vertex in your collection with an id of "Test", you can request the url: `localhost:8080/Test', and it should return the vertex, along with it's properties if any.

To learn more about Tinkerpop and the Gremlin query language: https://tinkerpop.apache.org/docs/current/tutorials/getting-started/

This Github repository has all code needed to run this example: https://github.com/juhlmann75/cosmosdb-gremlin-spring-boot-starter

Top comments (0)