好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

SpringBoot批处理的实现示例

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

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

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

1.添加依赖

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

< dependency >

     < groupId >org.springframework.boot</ groupId >

     < artifactId >spring-boot-starter-batch</ artifactId >

</ dependency >

< dependency >

     < groupId >org.springframework.boot</ groupId >

     < artifactId >spring-boot-starter-jdbc</ artifactId >

</ dependency >

< dependency >

     < groupId >com.alibaba</ groupId >

     < artifactId >druid-spring-boot-starter</ artifactId >

     < version >1.1.9</ version >

</ dependency >

< dependency >

     < groupId >mysql</ groupId >

     < artifactId >mysql-connector-java</ artifactId >

</ dependency >

2.添加配置 信息

?

1

2

3

4

5

6

7

8

9

10

11

12

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支持

?

1

2

3

4

5

6

7

8

9

@SpringBootApplication

@EnableBatchProcessing

public class BatchApplication {

 

     public static void main(String[] args) {

         SpringApplication.run(BatchApplication. class , args);

     }

 

}

4.配置批处理

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

@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);

         }

     }

     @Bean

     ItemReader<User> itemReader()

     {

          FlatFileItemReader<User> reader = new FlatFileItemReader<User>();

          reader.setLinesToSkip( 1 );

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

          reader.setLineMapper( new DefaultLineMapper<User>(){

              {

                  setLineTokenizer( new DelimitedLineTokenizer(){{

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

                      //setDelimiter("\t");

                  }});

                  setFieldSetMapper( new BeanWrapperFieldSetMapper<User>(){{

                      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" )

                 .<User,User>chunk( 2 )

                 .reader(itemReader())

                 .writer(jdbcBatchItemWriter())

                 .build();

     }

 

     @Bean

     Job csvJob()

     {

         return jobBuilderFactory.get( "csvJob" )

                 .start(csvStep())

                 .build();

     }

 

}

5.实体类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

@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表不能自动创建和字段需要提前设置,否则会出现错误,还需要进一步处理,待完成。暂做标记!

到此这篇关于SpringBoot批处理的实现示例的文章就介绍到这了,更多相关SpringBoot批处理内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/kangguang/article/details/104521093

查看更多关于SpringBoot批处理的实现示例的详细内容...

  阅读:13次