分享方式:


快速入門:搭配適用於 Java 的 Azure SDK 使用適用於 NoSQL 的 Azure Cosmos DB

在本快速入門中,您會使用適用於 Java 的 Azure SDK 來部署適用於資料表的基本 Azure Cosmos DB 應用程式。 Azure Cosmos DB for Table 是無架構的數據存放區,可讓應用程式將結構化數據表數據儲存在雲端中。 您將瞭解如何使用適用於 Java 的 Azure SDK,在 Azure Cosmos DB 資源內建立資料表、數據列及執行基本工作。

API 參考文件 | 程式庫原始程式碼 | 封裝 (Maven) | Azure Developer CLI

必要條件

  • Azure Developer CLI
  • Docker Desktop
  • Java 21

如果您沒有 Azure 帳戶,請在您開始之前先建立 免費帳戶

初始化專案

使用 Azure 開發人員 CLI (azd) 建立適用於資料表帳戶的 Azure Cosmos DB,並部署容器化範例應用程式。 應用程式範例使用用戶端程式庫管理、建立、讀取和查詢樣本資料。

  1. 在空的目錄中開啟終端機。

  2. 如果您尚未通過驗證,請使用 azd auth login向 Azure 開發人員 CLI 進行驗證。 依照工具指定的步驟,使用您慣用的 Azure 認證向 CLI 進行驗證。

    azd auth login
    
  3. 使用 azd init 來初始化專案。

    azd init --template cosmos-db-nosql-java-quickstart
    
  4. 在初始化期間,請設定唯一的環境名稱。

  5. 使用 azd up 部署 Azure Cosmos DB 帳戶。 Bicep 範本也會部署範例 Web 應用程式。

    azd up
    
  6. 在布建程式期間,選取您的訂用帳戶、所需的位置和目標資源群組。 等候佈建程序完成。 此流程「大約需要五分鐘」的時間。

  7. Azure 資源佈建完成後,輸出將包含正在執行的 Web 應用程式的 URL。

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
    - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io>
    
    SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
    
  8. 請使用主控台中的 URL,以在瀏覽器中導覽至您的 Web 應用程式。 觀察執行中應用程式的輸出。

螢幕擷取畫面,其中顯示執行中的 Web 應用程式。

安裝用戶端程式庫

用戶端程式庫可透過 Maven 以 azure-spring-data-cosmos 封裝形式提供。

  1. 瀏覽到 /src/web 資料夾,然後開啟 pom.xml 檔案。

  2. 如果封裝尚不存在,請新增 azure-spring-data-cosmos 封裝的項目。

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-spring-data-cosmos</artifactId>
    </dependency>
    
  3. 此外如果 azure-identity 封裝不存在,請新增另一個相依性。

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
    </dependency>
    

物件模型

名稱 描述
EnableCosmosRepositories 這個型別是一種方法裝飾項目,用於設定存放庫以存取 Azure Cosmos DB for NoSQL。
CosmosRepository 這個類別是主要用戶端類別,用於管理容器內的資料。
CosmosClientBuilder 這個類別是個中心,用於建立存放庫所用的用戶端。
Query 這個型別是一種方法裝飾項目,用於指定存放庫執行的查詢。

程式碼範例

範本中的程式碼範例使用 cosmicworks 資料庫和 products 容器。 products 容器包含每個產品的名稱、類別、數量、唯一識別碼和銷售旗標這類詳細資料。 容器使用 /category 屬性作為邏輯分割區索引鍵。

驗證用戶端

首先這個樣本會建立繼承自 AbstractCosmosConfiguration 的新類別,以設定與 Azure Cosmos DB for NoSQL 的連接。

@Configuration
@EnableCosmosRepositories
public class CosmosConfiguration extends AbstractCosmosConfiguration {
}

在設定類別中,這個樣本會建立 CosmosClientBuilder 類別的新執行個體,並使用 DefaultAzureCredential 執行個體來設定驗證。

@Bean
public CosmosClientBuilder getCosmosClientBuilder() {
    DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
        .build();
        
    return new CosmosClientBuilder()
        .endpoint("<azure-cosmos-db-nosql-account-endpoint>")
        .credential(credential);
}

取得資料庫

在設定類別中,樣本實作了一個方法,傳回現有資料庫 cosmicworks 的名稱。

@Override
protected String getDatabaseName() {
    return "cosmicworks";
}

取得容器

使用 Container 方法裝飾項目,設定一個類別來表示容器中的項目。 編寫類別,將所有要序列化成 JSON 的成員包含在內。 在這個範例中,該型別有唯一識別碼,以及類別、名稱、數量、價格和權限欄位。

@Container(containerName = "products", autoCreateContainer = false)
public class Item {
    private String id;
    private String name;
    private Integer quantity;
    private Boolean sale;

    @PartitionKey
    private String category;

    // Extra members omitted for brevity
}

建立項目

使用 repository.save 在容器中建立一個項目。

Item item = new Item(
    "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    "gear-surf-surfboards",
    "Yamba Surfboard",
    12,
    false
);
Item created_item = repository.save(item);

讀取項目

使用唯一識別碼 (id) 和分割區索引鍵欄位,來執行點讀取作業。 使用 repository.findById 有效率地擷取特定項目。

PartitionKey partitionKey = new PartitionKey("gear-surf-surfboards");
Optional<Item> existing_item = repository.findById("aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", partitionKey);
if (existing_item.isPresent()) {
    // Do something
}

查詢項目

在存放庫介面中定義查詢,即可對容器中的多個項目執行查詢。 這個樣本使用 Query 方法裝飾項目,定義執行此參數化查詢的方法:

SELECT * FROM products p WHERE p.category = @category
@Repository
public interface ItemRepository extends CosmosRepository<Item, String> {

    @Query("SELECT * FROM products p WHERE p.category = @category")
    List<Item> getItemsByCategory(@Param("category") String category);

}

使用 repository.getItemsByCategory 擷取查詢的所有結果。 重複查看查詢的結果。

List<Item> items = repository.getItemsByCategory("gear-surf-surfboards");
for (Item item : items) {
    // Do something
}

清除資源

當您不再需要範例應用程式或資源時,請移除對應的部署和所有資源。

azd down