Springboot 整合 spring batch 实现批处理 ,小白文实例讲解

本文详细介绍了如何在Spring Boot项目中整合Spring Batch实现批处理功能,包括ItemReader、ItemProcessor、ItemWriter的配置与使用,以及数据读取、处理、输出的完整流程。文章还涉及到数据校验、监听器、错误处理和事务控制,以及在实际操作中遇到的问题和解决方案,如使用HikariCP替代Druid作为连接池。
摘要由CSDN通过智能技术生成

/**

  • ItemReader定义:读取文件数据+entirty实体类映射

  • @return

*/

@Bean

public ItemReader reader(){

// 使用FlatFileItemReader去读cvs文件,一行即一条数据

FlatFileItemReader reader = new FlatFileItemReader<>();

// 设置文件处在路径

reader.setResource(new ClassPathResource(“static/bloginfo.csv”));

// entity与csv数据做映射

reader.setLineMapper(new DefaultLineMapper() {

{

setLineTokenizer(new DelimitedLineTokenizer() {

{

setNames(new String[]{“blogAuthor”,“blogUrl”,“blogTitle”,“blogItem”});

}

});

setFieldSetMapper(new BeanWrapperFieldSetMapper() {

{

setTargetType(BlogInfo.class);

}

});

}

});

return reader;

}

简单代码解析:

对于数据读取器 ItemReader ,我们给它安排了一个读取监听器,创建 MyReadListener.java :

/**

  • @Author : JCccc

  • @CreateTime : 2020/3/17

  • @Description :

**/

public class MyReadListener implements ItemReadListener {

private Logger logger = LoggerFactory.getLogger(MyReadListener.class);

@Override

public void beforeRead() {

}

@Override

public void afterRead(BlogInfo item) {

}

@Override

public void onReadError(Exception ex) {

try {

logger.info(format(“%s%n”, ex.getMessage()));

} catch (Exception e) {

e.printStackTrace();

}

}

}

ItemProcessor

写在MyBatchConfig类里

/**

  • 注册ItemProcessor: 处理数据+校验数据

  • @return

*/

@Bean

public ItemProcessor<BlogInfo, BlogInfo> processor(){

MyItemProcessor myItemProcessor = new MyItemProcessor();

// 设置校验器

myItemProcessor.setValidator(myBeanValidator());

return myItemProcessor;

}

数据处理器,是我们自定义的,里面主要是包含我们对数据处理的业务逻辑,并且我们设置了一些数据校验器,我们这里使用

JSR-303的Validator来作为校验器。

校验器

写在MyBatchConfig类里

/**

  • 注册校验器

  • @return

*/

@Bean

public MyBeanValidator myBeanValidator(){

return new MyBeanValidator();

}

创建MyItemProcessor.java :

ps: 里面我的数据处理逻辑是,获取出读取数据里面的每条数据的blogItem字段,如果是springboot,那就对title字段值进行替换。

其实也就是模拟一个简单地数据处理场景。

import com.example.batchdemo.pojo.BlogInfo;

import org.springframework.batch.item.validator.ValidatingItemProcessor;

import org.springframework.batch.item.validator.ValidationException;

/**

  • @Author : JCccc

  • @CreateTime : 2020/3/17

  • @Description :

**/

public class MyItemProcessor extends ValidatingItemProcessor {

@Override

public BlogInfo process(BlogInfo item) throws ValidationException {

/**

  • 需要执行super.process(item)才会调用自定义校验器

*/

super.process(item);

/**

  • 对数据进行简单的处理

*/

if (item.getBlogItem().equals(“springboot”)) {

item.setBlogTitle(“springboot 系列还请看看我Jc”);

} else {

item.setBlogTitle(“未知系列”);

}

return item;

}

}

创建MyBeanValidator.java:

import org.springframework.batch.item.validator.ValidationException;

import org.springframework.batch.item.validator.Validator;

import org.springframework.beans.factory.InitializingBean;

import javax.validation.ConstraintViolation;

import javax.validation.Validation;

import javax.validation.ValidatorFactory;

import java.util.Set;

/**

  • @Author : JCccc

  • @CreateTime : 2020/3/2017

  • @Description :

**/

public class MyBeanValidator implements Validator, InitializingBean {

private javax.validation.Validator validator;

@Override

public void validate(T value) throws ValidationException {

/**

  • 使用Validator的validate方法校验数据

*/

Set<ConstraintViolation> constraintViolations =

validator.validate(value);

if (constraintViolations.size() > 0) {

StringBuilder message = new StringBuilder();

for (ConstraintViola

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值