You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:00:53