Java – Visual Studio Code – Maven の利用 No.25

自己投資としてチャレンジしている内容を Blog で公開しています。今回は Ubuntu 上で Visual Studio Code を利用し Maven for Java で Java のコードを書いてみたいと思います。

————————————
▼1. Visual Studio Code を利用して Maven for Java で Java のコードを書いてみる
————————————
pom.xml を利用しライブラリーを指定することで必要なライブラリーを自動でダウンロードすることができます。手動でライブラリーをダウンロードし設定する必要がありません。IntelliJ IDEA 同様、VS Code でも Maven を利用して Java のコードを書きたいと思います。

今回は以前紹介した下記の Cosmos DB – SQL API へのデータの書き込みと参照方法を利用します。Java Azure Cosmos DB (SQL API) データの参照方法 No.15
Java CSV ファイルのデータを Azure Cosmos DB (SQL API) に入れる No.20

————————————
▼2. 事前準備
————————————
2-1. Visual Studio Code のインストール等
Java – Visual Studio Code の利用 No.24

2-2. Extension Pack for Java のインストール
Java build tools in VS Code
Maven and Gradle support for Java in Visual Studio Code

2-3. VS Code 上で Ctrl + Shift + P を押し、”Java: Create Java Project…” をクリックし、次に “Maven create from archetype provided by Maven for Java” をクリックします。その後、”maven-architypes-quickstart” をクリックし、現在最新の 1.4 のバージョンを選択します。

2-4. 以下のように groupId を入力し Enter を押し、続いて artifactId を入力し Enter を押します。その後、プロジェクトを作成するフォルダを選択します。
(例)
groupId  com.example
artifactId  democosmosdb

 2-5. Terminal で version を聞かれるので、今回は 1.0 と入れます。 その後 Summary が表示されるので、Y を入力してウィザードを進めます。

2-6. App.java や pom.xml ファイルが作成されている事を確認します。

————————————
▼3. Maven を利用し Cosmos DB へのデータを登録し参照する Java コードの実装
————————————
3-1. item を生成し Cosmos DB に insert したのち、item を参照します。
既定で App.java が作成されているので削除して InsertCosmosDBv4.java のファイルを作成します。
(例) InsertCosmosDBv4 .java

package com.example;
  
 import com.azure.cosmos.*;
 import com.azure.cosmos.models.*;
 import com.azure.cosmos.util.CosmosPagedIterable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import java.util.Collections;
 import java.util.stream.Collectors;
 import java.lang.System;
 import java.util.Random;
  
 public class InsertCosmosDBv4 {
     protected static final Logger log = LoggerFactory.getLogger(InsertCosmosDBv4.class);
  
     public static class Family{
         public String id;
         public String lastName;
         public boolean isRegistered;
         public String getId(){
             return id;
         }
         public String getLastName(){
             return lastName;
         }
         public Family(){}
         public Family(String idv,String lastnamev, boolean isv){
             id=idv;
             lastName=lastnamev;
             isRegistered=isv;
         }
     }
     
     public static void main(String... args) {
     String databaseName = "DatabaseName";
     String end_point = "https://cosmosdbaccountname.documents.azure.com:443";
     String master_key = "key";
     String containerName = "collection";
  
     // Create random string
     String randchar = "1234567890";
     StringBuilder rdc = new StringBuilder();
     Random rnd = new Random();
     while (rdc.length() < 3) { // length of the random string.
             int index = (int) (rnd.nextFloat() * randchar.length());
             rdc.append(randchar.charAt(index));
         }
     String rdcStr = rdc.toString();
     
     // Prepare for records to insert data into Cosmos DB
     Family family2 = new Family(rdcStr,"k"+rdcStr,false);
     
     //Connect to Cosmos DB and execute Insert and Select on Cosmos DB
         try (CosmosClient cosmosClient = new CosmosClientBuilder().endpoint(end_point).key(master_key).gatewayMode(GatewayConnectionConfig.getDefaultConfig()).consistencyLevel(ConsistencyLevel.SESSION).connectionSharingAcrossClientsEnabled(true).contentResponseOnWriteEnabled(true).userAgentSuffix("Application-clienttest").preferredRegions(Collections.singletonList("West US")).buildClient()){
         log.info("The connection to Cosmos DB succeeded.");
         log.info("Set Databse");
         CosmosDatabase database = cosmosClient.getDatabase(databaseName);
         log.info("Set Container");
         CosmosContainer container = database.getContainer(containerName);
         log.info("Set some common query options");
         CosmosQueryRequestOptions queryOptions = new CosmosQueryRequestOptions();
         CosmosPagedIterable<Family> familiesPagedIterable = container.queryItems("select * from c",queryOptions,Family.class);
         log.info("Create item using container. Use lastName as partitionKey for the item");
         CosmosItemRequestOptions cosmosItemRequestOptions = new CosmosItemRequestOptions();
         log.info("insert data into items");
         CosmosItemResponse<Family> item = container.createItem(family2, new PartitionKey(family2.getLastName()),cosmosItemRequestOptions);
         log.info("Read data");
         System.out.println("===========================");
         familiesPagedIterable.iterableByPage(10).forEach(cosmosItemPropertiesFeedResponse ->
         {System.out.println("Got results " + cosmosItemPropertiesFeedResponse.getResults().size() + " items(s)"
                 + " | Item Ids " + cosmosItemPropertiesFeedResponse.getResults().stream().map(Family::getId).collect(Collectors.toList())
                 + " | request charge of " + cosmosItemPropertiesFeedResponse.getRequestCharge()
                 + " | request ActivityId " + cosmosItemPropertiesFeedResponse.getActivityId());
         System.out.println("===========================");
         });
         }catch(CosmosException e){
         e.printStackTrace();
     }
     }
 } 

(例) pom.xml (一部)

   xxx
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <maven.compiler.source>15</maven.compiler.source>
     <maven.compiler.target>15</maven.compiler.target>
   </properties>
   <dependencies>
      xxx
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
       <version>1.7.30</version>
   </dependency>
     <dependency>
       <groupId>com.azure</groupId>
       <artifactId>azure-cosmos</artifactId>
       <version>4.14.0</version>
   </dependency>  
   </dependencies>
      xxx 

3-2. VS Code の UI 上で “Debug Java” を押して実行した結果 (一部) は以下となります。

 [main] INFO com.example.InsertCosmosDBv4 - The connection to Cosmos DB succeeded.
 [main] INFO com.example.InsertCosmosDBv4 - Set Databse
 [main] INFO com.example.InsertCosmosDBv4 - Set Container
 [main] INFO com.example.InsertCosmosDBv4 - Set some common query options
 [main] INFO com.example.InsertCosmosDBv4 - Create item using container. Use lastName as partitionKey for the item
 [main] INFO com.example.InsertCosmosDBv4 - insert data into items
 [reactor-http-epoll-3] INFO com.azure.cosmos.implementation.SessionContainer - Registering a new collection resourceId [abcdefg=] in SessionTokens
 [main] INFO com.example.InsertCosmosDBv4 - Read data
 ===========================
 Got results 5 items(s) | Item Ids [7, 8, 1, 2, 270] | request charge of 2.34 | request ActivityId abcdefg-132f3-124bdf-derd-xxxxxx
 ===========================
 [main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Attempting to close client 0
 [main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Shutting down ...
 [main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Closing Global Endpoint Manager ...
 [main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Closing StoreClientFactory ...
 [main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Shutting down reactorHttpClient ...
 [main] INFO com.azure.cosmos.implementation.http.SharedGatewayHttpClient - closing one reference to the shared HttpClient, the number of remaining references is 1
 [main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Shutting down CpuMonitor ...
 [main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Shutting down completed. 

以上です。参考になりましたら幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です