SpringBatch是一个大数据量的并行处理框架。通常用于数据的离线迁移,和数据处理,& # 12096;持事务,并发,流程,监控,纵向和横向扩展,提供统& # 12032;的接& # 12061;管理和任务管理;SpringBatch是SpringSource和埃森哲为了统一业界并行处理标准为广大开发者提供方便开发的一套框架。
官方地址:github.com/spring-projects/spring-batch
-
<李> SpringBatch本身提供了重试,异常处理,跳过,重启,任务处理统计,资源管理等特性,这些特性开发者看重他的主要原因,李>
<李> SpringBatch是一个轻量级的批处理框架;李>
<李> SpringBatch结构分层,业务与处理策略,结构分离,李>
<李>任务的运行的实例状态,执行数据,参数都会落地到数据库;
李>
<强>砰的一声。xml添加强>
& lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-batch & lt;/dependency>
<>强创建BatchConfig(可以是其他类名)强>
@ configuration @EnableBatchProcessing 公开课BatchConfig {//标签:readerwriterprocessor [] @ bean 公共FlatFileItemReaderflatFileItemReader () { FlatFileItemReader ,读者=new FlatFileItemReader<的在(); 读者。setResource(新ClassPathResource (“sample-data.csv”); FixedLengthTokenizer FixedLengthTokenizer=new FixedLengthTokenizer (); 读者。setLineMapper(新的DefaultLineMapper () {{ setLineTokenizer(新DelimitedLineTokenizer () {{ setNames(新String [] {“firstName”,“姓”}); }}); setFieldSetMapper(新的BeanWrapperFieldSetMapper () {{ setTargetType (Person.class); }}); }}); 返回读者; } @ bean 公共JdbcPagingItemReader jdbcPagingItemReader数据源(DataSource) { JdbcPagingItemReader ,读者=new JdbcPagingItemReader<的在(); reader.setDataSource(数据源); reader.setFetchSize (100); 读者。setQueryProvider(新MySqlPagingQueryProvider () {{ setSelectClause(“选择person_id first_name、last_name”); setFromClause(“的”); setWhereClause (“last_name=:姓”); setSortKeys(新HashMap<字符串,Order> () {{ 把(“person_id”, Order.ASCENDING); }}); }}); 读者。setParameterValues(新HashMap<字符串,Object> () {{ 把(“姓”,“母鹿”); }}); 读者。setRowMapper(新BeanPropertyRowMapper<祝辞(Person.class)); 返回读者; } @ bean 公共JdbcBatchItemWriter jdbcBatchItemWriter数据源(DataSource) { JdbcBatchItemWriter ,作家=new JdbcBatchItemWriter<的在(); 作家。,setItemSqlParameterSourceProvider(新BeanPropertyItemSqlParameterSourceProvider<的在()); 作家。setSql(“插入(first_name、last_name)值(:firstName、lastName):”); writer.setDataSource(数据源); 返回的作家; }/* @ bean 公共FlatFileItemWriter flatFileItemWriter数据源(DataSource) { FlatFileItemWriter ,作家=new FlatFileItemWriter<的在(); writer.setAppendAllowed(真正的); writer.setEncoding (“utf - 8”);//writer.set(数据源); 返回的作家; } *///结束:readerwriterprocessor []//标签:jobstep [] @ bean 公共工作importUserJob (JobBuilderFactory JobBuilderFactory JobCompletionNotificationListener侦听器,一步一步){ 返回jobBuilderFactory.get (“importUserJob”) .incrementer(新RunIdIncrementer ()) .listener(听众) .start(步骤) .build (); } @ bean 公共步骤step1 (StepBuilderFactory StepBuilderFactory、PersonItemProcessor处理器ItemWriter jdbcBatchItemWriter, ItemReader flatFileItemReader) {/* CompositeItemProcessor CompositeItemProcessor=new CompositeItemProcessor (); compositeItemProcessor.setDelegates(列表。newArrayList(处理器,处理器));*/返回stepBuilderFactory.get(“步骤1”) 块灵活;人,Person> (10) .reader (flatFileItemReader) .processor(处理器) .writer (jdbcBatchItemWriter) .build (); }//结束:jobstep [] }
<强> Spring Batch的分层架构强>
-
<李> Insfrastructure策略管理:包括任务的失败重试,异常处理,事务,跳过,以及数据的输入输出(文本文件,DB,消息)李>
<李>核心:springBatch的核心,包括JobLauch,工作,等步等李>
<李>应用程序:业务处理,创建任务,决定任务的执行方式(定时任务,手动触发等)