SpringBoot批处理的实现示例

网友投稿 288 2022-08-20


SpringBoot批处理的实现示例

目录1.添加依赖2.添加配置信息3.在项目启动类上添加@EnableBatchProcessing注解开开启SpringBatch支持4.配置批处理5.实体类6.创建Controller

Spring Batch是一个开源 的、全面的、轻量级的批处理框架,通过Spring  Boot 可以实现强大的批处理应用程序开发。

Spring Batch提供了ItemReader、ItemProcessor和ItemWriter来完成数据的读取、处理及写出操作,并且可以将批处理的执行状态 持久化到数据库中。

https://spring.io/projects/spring-batch

1.添加依赖

org.springframework.boot

spring-boot-starter-batch

org.springframework.boot

spring-boot-starter-jdbc

com.alibaba

druid-spring-boot-starter

1.1.9

mysql

mysql-connector-java

2.添加配置 信息

server.port=9000

spring.http.encoding.force-response=true

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

spring.datasource.url=jdbc:mysql:///batch

spring.datasource.username = root

spring.datasource.password = kangxg198811

#项目启动时创建数据表的SQL脚本

spring.datasource.schema=classpath:/org/springframework/batch/core/schema-mysql.sql

#项目启动时执行建表SQL

spring.batch.initialize-schema=always

#配置后不会自动执行

spring.batch.job.enabled=false

3.在项目启动类上添加@EnableBatchProcessing注解开开启Spring Batch支持

@SpringBootApplication

@EnableBatchProcessing

public class BatchApplication {

public static void main(String[] args) {

SpringApplication.run(BatchApplication.class, args);

}

}

4.配置批处理

@Configuration

public class CsvBatchJobConfig {

@Autowired

JobBuilderFactory jobBuilderFactory;

@Autowired

StepBuilderFactory stepBuilderFactory;

@Autowired

DataSource dataSource;

class CustomLineCallbackHandler implements LineCallbackHandler{

@Override

public void handleLine(String result)

{

System.out.println(result);

WGDadyEK }

}

@Bean

ItemReader itemReader()

{

FlatFileItemReader reader = new FlatFileItemReader();

reader.setLinesToSkip(1);

reader.setResource(new ClassPathResource("data.csv"));

reader.setLineMapper(new DefaultLineMapper(){

{

setLineTokenizer(new DelimitedLineTokenizer(){{

setNames(new String[]{"id","username","address","gender"});

//setDelimiter("\t");

}});

setFieldSetMapper(new BeanWrapperFieldSetMapper(){{

setTargetType(User.class);

}});

}

});

reader.setSkippedLinesCallback(new CustomLineCallbackHandler());

return reader;

}

@Bean

JdbcBatchItemWriter jdbcBatchItemWriter()

{

JdbcBatchItemWriter writer = new JdbcBatchItemWriter();

writer.setDataSource(dataSource);

writer.setSql("insert into user(id,username,address,gender)" + "values(:id,:username,:address,:gender)");

writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider());

return writer;

}

@Bean

Step csvStep()

{

return stepBuilderFactory.get("csvStep")

.chunk(2)

.reader(itemReader())

.writer(jdbcBatchItemWriter())

.build();

}

@Bean

Job csvJob()

{

return jobBuilderFactory.get("csvJob")

.start(csvStep())

.build();

}

}

5.实体类

public class User {

private Integer id;

private String username;

private String address;

private String gender;

public User(Integer id,String username,String address,String gender)

{

this.username= username;

this.id = id;

this.address = address;

this.gender = gender;

}

public User()

{

super();

}

public void setId(Integer id) {

this.id = id;

}

public void setUsername(String username) {

this.username = username;

}

public void setGender(String gender) {

this.gender = gender;

}

public void setAddress(String address) {

this.address = address;

}

public String getUsername() {

return username;

}

public String getGender() {

return gender;

}

public Integer getId() {

return id;

}

public String getAddress() {

return address;

}

@Override

public String toString() {

return "User{" +

"id=" + id +

", username='" + username + '\'' +

", address='" + address + '\'' +

", gender='" + gender + '\'' +

'}';

}

}

6.创建Controller

@RestController

public class BatchController {

@Autowired

JobLauncher jobLauncher;

@Autowired

Job job;

@GetMapping("/batch")

public void batch()

{

try {

jobLauncher.run(job,new JobParametersBuilder().toJobParameters());

}catch (Exception e)

{

e.printStackTrace();

}

}

}

这里配置就结束了,数据库会增加一些自动创建到表,但是User表不能自动创建和字段需要提前设置,否则会出现错误,还需要进一步处理,待完成。暂做标记!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java并发数据包Exchanger线程间的数据交换器
下一篇:关于Filter中获取请求体body后再次读取的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~