我試圖用下面的代碼來檢查我的dynamodb表中是否存在一個專案。 我希望在檢索到該專案后能夠運行一些東西。磁區鍵是envName,排序鍵是configurationName
。package com.dev.newlibs;
//所有相關的匯入都添加在這里。
public class updatenewCMDB {
public static void main title function_">main(String[] args)throws Exception {
String tableName = "env_dashboard" ;
String configurationName = "components";
String configurationNameValue = "ec2" ;
String envName = "env_Name"。
String envNameValue = "dev"。
String status = "status";
String statusValue = "COMPLETE"/span>;
DynamoDbClient client = DynamoDbClient.builder()。
.region(Region.EU_WEST_1)
.build()。
client.close()。
updateEnvDashboard(client, tableName, configurationName, configurationNameValue, envName, envNameValue, status, statusValue,) 。
}
public static void updateEnvDashboard(DynamoDbClient客戶端。
字串tableName。
字串配置名稱。
字串configurationNameValue。
字串 envName,
字串envNameValue。
字串status。
String statusValue,) throws Exception {
//Get item to see if it exists[/span]。
HashMap<String,AttributeValue> itemToGet = new HashMap<String,AttributeValue> ()。
itemToGet.put(configurationName, AttributeValue.builder().s(configurationNameValue).building())。
itemToGet.put(status, AttributeValue.builder().s(statusValue).build())。
itemToGet.put(envName, AttributeValue.builder().s(envNameValue).build())。
GetItemRequest request = GetItemRequest.builder()
.key(itemToGet)
.tableName(tableName)
.build()。
//run a get request and see what is returned. Do something depending on what is returned
try {
Map<String,AttributeValue> returnedItem = client.getItem(request).item()。
if (returnItem != null) {
Set<String> keys = returnedItem.keySet()。
System.out.println("Amazon DynamoDB表屬性。
")。)
for (String key1 : keys) {
System.out.format("%s: %s
"/span>, key1, returnedItem.get(key1).toString())。
}
} else {
System.out.format("沒有找到鍵值為%s的專案!
")。)
}
} catch(DynamoDbException e){
e.printStackTrace()。
System.exit(1)。
}
}
當運行這個時,我得到的錯誤是:
。
software.amazon.awssdk.services.dynamodb.model.DynamoDbException: 所提供的關鍵元素與模式不匹配
我在這里錯過了什么?我已經嘗試按照aws官方repo中的getItem例子來做了
。uj5u.com熱心網友回復:
時,你必須提供具有正確型別的關鍵屬性(s)。下面是客戶Java類。
package com.example.dynamodb;
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable。
import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbPartitionKey;
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbSortKey;
import software.amazon.awssdk.enhanced.dynamodb.model.BatchWriteItemEnhancedRequest;
import software.amazon.awssdk.enhanced.dynamodb.model.WriteBatch;
import software.amazon.awssdk.regions.Region。
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import java.time.Instant.DynamoDbException;
import java.time.LocalDate。
import java.time.LocalDateTime;
import java.time.ZoneOffset;
/**。
*該類被增強型客戶端的例子所使用。
*/
@DynamoDbBean
public class Customer {
private String id;
private String name;
private String email;
private Instant regDate;
@DynamoDbPartitionKey[/span
public String getId() {
return this.id。
};
public void setId(String id) {
this.id = id;
}
public String getCustName() {
return this.name。
}
public void setCustName(String name) {
this.name = name。
}
public String getEmail() {
return this.email。
}
public void setEmail(String email) {
this.email = email。
}
public Instant getRegistrationDate() {
return regDate。
}
public void setRegistrationDate(Instant registrationDate) {
this.regDate = registrationDate。
}
}
你可以用這段代碼獲得一個客戶記錄:
package com.example.dynamodb;
// snippet-start:[dynamodb.java2.mapping.getitem.import]
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient。
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
import software.amazon.awssdk.enhanced.dynamodb.Key。
import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbPartitionKey;
import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbSortKey;
import software.amazon.awssdk.regions.Region。
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import java.time.Instant.DynamoDbException;
// snippet-end:[dynamodb.java2.mapping.getitem.import]
/*
* 在運行此代碼示例之前,創建一個名為Customer的Amazon DynamoDB表,其中有這些列。
* - id - 作為鍵的記錄的id
* - custName - 客戶名稱
* - email - 電子郵件的值
* - registrationDate - 專案被添加到表中時的一個即時值
*
* 另外,確保你已經設定了你的開發環境,包括你的證書。
*
* 有關資訊,請參閱此檔案主題。
*
* https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
*/
public class EnhancedGetItem {
public static void main(String[] args) {
Region region = Region.US_EAST_1;
DynamoDbClient ddb = DynamoDbClient.builder()
.region(region)
.build()。
DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.builder()
.dynamoDbClient(ddb)
.build()。
String result = getItem(enhancedClient)。
System.out.println(result)。
ddb.close()。
}
//snippet-start:[dynamodb.java2.mapping.getitem.main]/span>
public static String getItem(DynamoDbEnhancedClient enhancedClient) {
try {
//Create a DynamoDbTable object。
DynamoDbTable<Customer> mappedTable = enhancedClient.table("Customer", TableSchema.fromBean(Customer.class) )。)
//創建一個KEY物件。
Key key = Key.builder()
.partitionValue("id146")
.build()。
//通過使用鍵來獲取專案。
Customer result = mappedTable.getItem(r->r.key(key))。
return "The email value is " result.getEmail();
} catch (DynamoDbException e) {
System.err.println(e.getMessage())。
System.exit(1)。
}
return ""。
}
//snippet-end:[dynamodb.java2.mapping.getitem.main]; }
}
正如你在這個除錯視圖中看到的,這段代碼檢索了客戶記錄。
另外--在你的執行緒中的代碼例子中,你在呼叫方法前關閉了客戶端:
DynamoDbClient client = DynamoDbClient.builder()
.region(Region.EU_WEST_1)
.build()。
client.close(); //bughere
updateEnvDashboard(client, tableName, configurationName, configurationNameValue, envName, envNameValue, status, statusValue,) 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/318088.html
標籤:


