SpringBatch - Validate, 竟然敢摸清華女學生
前言
清華美院一名女學生稱男同學通過包的掩護摸自己的 PP 並將男同學的身份資訊公開到社交媒體, 導致男同學險些社會性死亡, 後來查了監控才證明了男同學的清白.
Spring Batch 可校驗性
我們經常需要大量的讀取資料, 其中有些資料可能不符合我們的預期, 比如從介面讀了個使用者列表, 年齡欄位存在負數, 這種可能就需要中斷程式或者跳過處理, 接著處理下一條
Spring Batch 可校驗性例子
reader 和 writer 都是原來的, 我們重新寫個 processor:
@Component
public class QingGirlProcessor implements ItemProcessor<Girl, String> {
@Override
public String process(Girl girl) throws Exception {
return girl.getName() + "說被摸了PP";
}
}
使用組合將驗證的 processor 和上面的業務的 processor 串聯起來:
@Configuration
public class ProcessorConfig {
@Autowired
private QingGirlProcessor qingGirlProcessor;
@Bean
public BeanValidatingItemProcessor<Girl> girlBeanValidatingItemProcessor() throws Exception {
BeanValidatingItemProcessor<Girl> validator = new BeanValidatingItemProcessor<>();
validator.setFilter(true);
validator.afterPropertiesSet();
return validator;
}
@Bean
public ItemProcessor<Girl, String> girlStringItemProcessor() throws Exception {
List<ItemProcessor> list = new ArrayList<>();
list.add(girlBeanValidatingItemProcessor());
list.add(qingGirlProcessor);
CompositeItemProcessor compositeItemProcessor =
new CompositeItemProcessor<>();
compositeItemProcessor.setDelegates(list);
compositeItemProcessor.afterPropertiesSet();
return compositeItemProcessor;
}
}
任務配置:
final String JOB_NAME = "demo4QingGirl";
List<Girl> girlList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
girlList.add(i % 2 == 0 ? new Girl() : new Girl("唐靖"));
}
final ListReader<Girl> reader = new ListReader<>(girlList);
final Job girlJob = jobBuilderFactory.get(JOB_NAME)
.flow(stepBuilderFactory.get(JOB_NAME)
.<Girl, String>chunk(2).reader(reader)
.processor(girlStringItemProcessor).writer(printWriter).build())
.end().build();
jobLauncher.run(girlJob, new JobParametersBuilder()
.addDate("start_time", new Date()).toJobParameters());
輸出:
唐靖說被摸了PP
唐靖說被摸了PP
唐靖說被摸了PP
唐靖說被摸了PP
唐靖說被摸了PP
總共十個只輸出了五個這就是我們的 Girl 類的作用了:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Girl {
@NotBlank
private String name;
}
這樣就能保證只處理符合預期的資料了
微信公眾號:
相關文章
- 你需要了解下Android View的更新requestLayout與重繪invalidate
- vue表單驗證你真的會了嗎?元件之表單驗證(form)validate
- Swift 超簡單的驗證框架ValidateSwift
- Laravel 解決 validate 驗證 Ajax 表單請求驗證失敗報 422 錯誤
- 日本13歲女學生被警方調查:因釋出 JavaScript 無限迴圈程式碼
- HTML5 novalidate 屬性
- Vee-validate 父元件獲取子元件表單校驗結果
- @Validated和@Valid的區別?校驗級聯屬性(內部類)
- 讓你的 validate 支援場景驗證
- LeetCode 98. Validate Binary Search Tree
- Laravel 修改 validate 提示資訊為中文
- 《SpringBoot判空處理》揭開@Valid與@Validated的面紗
- vue使用驗證器: VeeValidate3
- $request->validate()原始碼解讀
- Vue表單驗證外掛vee-validate的應用介紹
- [ERROR] mysqld: Can‘t open shared library ‘/usr/local/mysql/lib/plugin/validate_password.so‘ (errno:
- 子執行緒呼叫invalidate()產生“Only the original thread that created a view hierarchy can touch its views.”原因分析