如何通过AWS DynamoDB Java SDK判断表是否开启PITR?
如何通过AWS Java SDK判断DynamoDB表是否启用PITR
你之前用错了对象——PointInTimeRecoverySpecification是创建或更新表时用来设置PITR状态的请求参数,而要查询当前表的PITR启用状态,得用PointInTimeRecoveryDescription,它是TableDescription里的返回字段。
下面分AWS Java SDK v1和v2两种情况给出实现代码:
AWS Java SDK v2 实现
import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.DescribeTableRequest; import software.amazon.awssdk.services.dynamodb.model.DescribeTableResponse; import software.amazon.awssdk.services.dynamodb.model.PointInTimeRecoveryStatus; public class CheckPITRStatus { public static void main(String[] args) { String tableName = "YourTableName"; // 初始化DynamoDbClient(建议用依赖注入或配置文件管理客户端) try (DynamoDbClient ddbClient = DynamoDbClient.create()) { DescribeTableRequest request = DescribeTableRequest.builder() .tableName(tableName) .build(); DescribeTableResponse response = ddbClient.describeTable(request); boolean isPITREnabled = response.table().pointInTimeRecoveryDescription() != null && response.table().pointInTimeRecoveryDescription().pointInTimeRecoveryStatus() == PointInTimeRecoveryStatus.ENABLED; System.out.println("PITR状态:" + (isPITREnabled ? "已启用" : "未启用")); } catch (Exception e) { e.printStackTrace(); } } }
AWS Java SDK v1 实现
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; import com.amazonaws.services.dynamodbv2.model.DescribeTableRequest; import com.amazonaws.services.dynamodbv2.model.DescribeTableResult; import com.amazonaws.services.dynamodbv2.model.PointInTimeRecoveryStatus; public class CheckPITRStatusV1 { public static void main(String[] args) { String tableName = "YourTableName"; AmazonDynamoDBClient ddbClient = new AmazonDynamoDBClient(); DescribeTableRequest request = new DescribeTableRequest().withTableName(tableName); DescribeTableResult result = ddbClient.describeTable(request); boolean isPITREnabled = result.getTable().getPointInTimeRecoveryDescription() != null && result.getTable().getPointInTimeRecoveryDescription().getPointInTimeRecoveryStatus().equals(PointInTimeRecoveryStatus.ENABLED); System.out.println("PITR状态:" + (isPITREnabled ? "已启用" : "未启用")); ddbClient.shutdown(); } }
关键说明
- 调用
describeTable接口后,从返回的TableDescription中提取PointInTimeRecoveryDescription - 如果该描述对象不为null,且
pointInTimeRecoveryStatus等于ENABLED,则表示PITR已启用 - 若未启用PITR,
pointInTimeRecoveryDescription会返回null
内容的提问来源于stack exchange,提问作者Jordy Rutjens
相关产品推荐
相关产品推荐

