DynamoDB仓库中@EnableScan注解的必填场景及功能说明
@EnableScan是否为DynamoDB Repository的必选注解
@EnableScan不是创建DynamoDB Repository时默认必须添加的注解。
默认情况下Spring Data DynamoDB会全局禁用Repository自动触发全表Scan的能力,本质是个防护机制:避免开发者写错查询条件、误调用全量拉取方法时,触发全表扫描带来高延迟、读容量单位(RCU)超量消耗甚至额外账单的问题。没加这个注解的Repository如果调用了需要走全表Scan的方法,框架会直接抛异常拒绝执行。
@EnableScan的具体功能
这个注解的核心作用是显式给标注的Repository放开全表Scan的执行权限,具体逻辑如下:
- 当Repository里的查询方法没法通过方法名派生、自定义注解映射到主键查询、二级索引查询的时候,框架会自动降级走全表Scan逻辑,过滤返回匹配条件的结果
- 注解加在Repository接口上时,会对整个接口内所有符合触发条件的方法生效
- 如果不需要给整个仓库放开Scan权限,也可以单独在具体查询方法上加
@Scan注解,用更小的粒度控制权限,减少非预期全表扫描的风险
参考代码示例
@EnableScan public interface DynamoRepository extends CrudRepository<Data, String> { // 加注解后,该Repository内的全量查询、无有效索引匹配的查询都可以正常通过Scan执行 }
生产环境非必要不建议直接给整个Repository加@EnableScan。DynamoDB全表扫描在表数据量较大时性能很差,RCU消耗极高,优先通过主键、二级索引设计实现高效查询才是合理方案。
内容的提问来源于stack exchange,提问作者TruBlu
相关产品推荐
相关产品推荐

