/** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See LICENSE in the project root for * license information. */ package com.example.demo; import com.azure.cosmos.CosmosAsyncContainer; import com.azure.cosmos.CosmosClientBuilder; import com.azure.cosmos.models.CosmosQueryRequestOptions; import com.azure.cosmos.models.FeedResponse; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Flux; import javax.annotation.PostConstruct; import java.util.List; @RestController public class CityController { @Value("${azure.cosmosdb.uri}") private String cosmosDbUrl; @Value("${azure.cosmosdb.key}") private String cosmosDbKey; @Value("${azure.cosmosdb.database}") private String cosmosDbDatabase; private CosmosAsyncContainer container; @PostConstruct public void init() { container = new CosmosClientBuilder() .endpoint(cosmosDbUrl) .key(cosmosDbKey) .buildAsyncClient() .getDatabase(cosmosDbDatabase) .getContainer("City"); } @GetMapping("/cities") public Flux<List<City>> getCities() { CosmosQueryRequestOptions options = new CosmosQueryRequestOptions(); return container.queryItems("SELECT TOP 20 * FROM City c", options, City.class) .byPage() .map(FeedResponse::getResults); } }