boot spring 解析csv_Java springboot整合springbatch实现读取csv,并写入数据库

1.导入依赖:

org.springframework.boot

spring-boot-starter-jdbc

org.springframework.boot

spring-boot-starter-web

org.postgresql

postgresql

runtime

org.projectlombok

lombok

true

com.baomidou

mybatis-plus-boot-starter

3.0.5

com.alibaba

druid

1.0.23

org.apache.commons

commons-csv

1.7

org.springframework.boot

spring-boot-starter-batch

`

2.创建数据库,数据表,并且保证字段属性要与实体类中数据类型对应 创建实体类:

@Data

@NoArgsConstructor

@AllArgsConstructor

public class Test {

Date time;

String base_station_name;

String integrity;

String energy_consumption;

String manufactor;

}

3.创建SpringBatch的配置类

@Configuration

public class CsvBatchJonConfig {

// 注入JobBuilderFactory,用来构建job

@Autowired

JobBuilderFactory jobBuilderFactory;

// 注入StepBuilderFactory,用来构建step

@Autowired

StepBuilderFactory stepBuilderFactory;

// 持久化操作----数据源

@Autowired

DataSource dataSource;

// 持久化操作----mybatis-plus

@Autowired

TestMapper testMapper;

// 配置一个ItemReader,即数据的读取逻辑

@Bean

@StepScope

FlatFileItemReader itemReader() {

// FlatFileItemReader 是一个加载普通文件的 ItemReader

FlatFileItemReader reader = new FlatFileItemReader<>();

// 由于data.csv文件第一行是标题,因此通过setLinesToSkip方法设置跳过一行

reader.setLinesToSkip(2);

// setResource方法配置data.csv文件的位置

reader.setResource(new ClassPathResource("子报表.csv"));

// 通过setLineMapper方法设置每一行的数据信息

reader.setLineMapper(new DefaultLineMapper(){{

setLineTokenizer(new DelimitedLineTokenizer(){{

// setNames方法配置了data.csv文件一共有4列,分别是id、username、以及sex,

setNames("time","base_station_name","integrity","energy_consumption","manufactor");

// 配置列与列之间的间隔符(这里是空格)

setDelimiter(",");

}});

setFieldSetMapper(new BeanWrapperFieldSetMapper(){{

setTargetType(Test.class);

}});

}});

return reader;

}

// 配置ItemWriter,即数据的写出逻辑

@Bean

JdbcBatchItemWriter jdbcBatchItemWriter() {

// 使用的JdbcBatchltemWriter则是通过JDBC将数据写出到一个关系型数据库中。

JdbcBatchItemWriter writer = new JdbcBatchItemWriter();

// 配置使用的数据源

writer.setDataSource(dataSource);

// 配置数据插入SQL,注意占位符的写法是":属性名"

writer.setSql("insert into test(time,base_station_name,integrity,energy_consumption,manufactor) " +

"values(:time,:base_station_name,:integrity,:energy_consumption,:manufactor)");

// 最后通过BeanPropertyItemSqlParameterSourceProvider实例将实体类的属性和SQL中的占位符一一映射

writer.setItemSqlParameterSourceProvider(

new BeanPropertyItemSqlParameterSourceProvider<>());

return writer;

}

// 配置一个Step

@Bean

Step csvStep() {

// Step通过stepBuilderFactory进行配置

return stepBuilderFactory.get("csvStep") //通过get获取一个StepBuilder,参数数Step的name

.chunk(2) //方法的参数2,表示每读取到两条数据就执行一次write操作

.reader(itemReader()) // 配置reader

.writer(jdbcBatchItemWriter()) // 配置writer

.build();

}

// 配置一个Job

@Bean

Job csvJob() {

// 通过jobBuilderFactory构建一个Job,get方法参数为Job的name

return jobBuilderFactory.get("csvJob")

.start(csvStep()) // 配置该Job的Step

.build();

}

}

`

4.主启动类添加开启springbatch

5.编写一个controller接口进行测试

`

@RestController

public class Hello {

//JobLauncher 由框架提供

@Autowired

JobLauncher jobLauncher;

// Job 为刚才配置的

@Autowired

Job job;

@GetMapping("/hello")

public String hello(){

try {

JobParameters jobParameters = new JobParametersBuilder()

.toJobParameters();

// 通过调用 JobLauncher 中的 run 方法启动一个批处理

jobLauncher.run(job, jobParameters);

} catch (Exception e) {

e.printStackTrace();

}

return "hello world";

}

}

`

6.完成!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值