为何RepositoryItemReaderBuilder比直接创建RepositoryItemReader Bean更严格?
RepositoryItemReaderBuilder 与直接 Bean 初始化的校验差异
RepositoryItemReaderBuilder 是 Spring Batch 4.0 中引入的。
为什么使用 RepositoryItemReaderBuilder 创建 RepositoryItemReader 实例,比通过 Spring 直接创建 RepositoryItemReader Bean 的要求更严格(甚至存在不一致)?
初始化 RepositoryItemReader Bean 的必要条件
直接创建 Bean 时,仅会校验以下 3 个字段:
@Override public void afterPropertiesSet() throws Exception { Assert.state(repository != null, "A PagingAndSortingRepository is required"); Assert.state(pageSize > 0, "Page size must be greater than 0"); Assert.state(sort != null, "A sort is required"); }
RepositoryItemReaderBuilder.build() 的必要条件
使用 Builder 构建实例时,会校验更多字段,例如 this.methodName 或 this.name:
public RepositoryItemReader<T> build() { if (this.repositoryMethodReference != null) { ... } Assert.notNull(this.sorts, "sorts map is required."); Assert.notNull(this.repository, "repository is required."); Assert.hasText(this.methodName, "methodName is required."); if (this.saveState) { Assert.state(StringUtils.hasText(this.name), "A name is required when saveState is set to true."); } RepositoryItemReader<T> reader = new RepositoryItemReader<>(); reader.set... reader.set... return reader; }
参考来源:
- Spring Batch 4.3.x 版本的
org.springframework.batch.item.data.RepositoryItemReader类 - Spring Batch 4.3.x 版本的
org.springframework.batch.item.data.builder.RepositoryItemReaderBuilder类
内容的提问来源于 stack exchange,提问作者 Guillaume Husta
相关产品推荐
相关产品推荐

