标签:writer Java springboot 配置 boot Job reader new springbatch
1.导入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.23</version>
</dependency>
<!-- csv依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
`
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<Test> itemReader() {
// FlatFileItemReader 是一个加载普通文件的 ItemReader
FlatFileItemReader<Test> reader = new FlatFileItemReader<>();
// 由于data.csv文件第一行是标题,因此通过setLinesToSkip方法设置跳过一行
reader.setLinesToSkip(2);
// setResource方法配置data.csv文件的位置
reader.setResource(new ClassPathResource("子报表.csv"));
// 通过setLineMapper方法设置每一行的数据信息
reader.setLineMapper(new DefaultLineMapper<Test>(){{
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
.<Test, Test>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.完成!
标签:writer,Java,springboot,配置,boot,Job,reader,new,springbatch 来源: https://www.cnblogs.com/lvxiaolei/p/13904192.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。