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.添加依赖

<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.添加配置 信息

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);
        }
    }
    @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.实体类

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

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

(0)

相关推荐

  • Spring Batch轻量级批处理框架实战

    目录 1 实战前的理论基础 1.1 Spring Batch是什么 1.2 Spring Batch能做什么 1.3 基础架构 1.4 核心概念和抽象 2 各个组件介绍 2.1 Job 2.2 Step 2.3 ExecutionContext 2.4 JobRepository 2.5 JobLauncher 2.6 Item Reader 2.7 Item Writer 2.8 Item Processor 3 Spring Batch实战 3.1 依赖和项目结构以及配置文件 3.2 代码和

  • Spring batch批处理框架

    spring batch框架的简介 批处理任务是大多数IT项目的一个重要组成部分,批处理在业务系统中负责处理海量的数据,无须人工干预就能够自动高效的进行复杂的数据分析和处理.批处理会定期读入批量数据,经过相应的业务处理进行归档的业务操作,批处理的特征是自动执行,处理的数据量大,定时执行.将整个批处理的流程按逻辑划分可以分为读数据,处理数据和写数据. spring batch对批处理本身的特性进行了抽象,将批处理作业抽象为job和job step,将批处理的处理过程分解为数据读,数据处理和数据写.

  • 详解Spring Batch 轻量级批处理框架实践

    实践内容 从 MariaDB 一张表内读 10 万条记录,经处理后写到 MongoDB . 具体实现 1.新建 Spring Boot 应用,依赖如下: <!-- Web 应用 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> &

  • 详解批处理框架之Spring Batch

    目录 一.Spring Batch的概念知识 1.1.分层架构 1.2.关键概念 1.2.1.JobRepository 1.2.2.任务启动器JobLauncher 1.2.3.任务Job 1.2.4.步骤Step 1.2.5.输入--处理--输出 二.代码实例 2.1.基本框架 2.2.输入--处理--输出 2.2.1.读取ItemReader 2.2.2.处理ItemProcessor 2.2.3.输出ItremWriter 2.3.Step 2.4.Job 2.5.运行 三.监听List

  • Spring Batch批处理框架使用解析

    这篇文章主要介绍了Spring Batch批处理框架使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用Spring Batch做为批处理框架,可以完成常规的数据量不是特别大的离线计算. 现在写一个简单的入门版示例. 这里默认大家已经掌握了Spring Batch的基本知识,示例只是为了快速上手实践 目标1:程序随机生成字符串,经过Spring Batch后,统一在字符串后加入"----PROCESSED",并输出 目标2:程

  • Java中批处理框架spring batch详细介绍

    spring batch简介 spring batch是spring提供的一个数据处理框架.企业域中的许多应用程序需要批量处理才能在关键任务环境中执行业务操作. 这些业务运营包括: 无需用户交互即可最有效地处理大量信息的自动化,复杂处理. 这些操作通常包括基于时间的事件(例如月末计算,通知或通信). 在非常大的数据集中重复处理复杂业务规则的定期应用(例如,保险利益确定或费率调整). 集成从内部和外部系统接收的信息,这些信息通常需要以事务方式格式化,验证和处理到记录系统中. 批处理用于每天为企业处

  • SpringBoot批处理的实现示例

    目录 1.添加依赖 2.添加配置信息 3.在项目启动类上添加@EnableBatchProcessing注解开开启SpringBatch支持 4.配置批处理 5.实体类 6.创建Controller Spring Batch是一个开源 的.全面的.轻量级的批处理框架,通过Spring  Boot 可以实现强大的批处理应用程序开发. Spring Batch提供了ItemReader.ItemProcessor和ItemWriter来完成数据的读取.处理及写出操作,并且可以将批处理的执行状态 持久

  • SpringBoot集成JPA的示例代码

    本文介绍了SpringBoot集成JPA的示例代码,分享给大家,具体如下: 1.创建新的maven项目 2. 添加必须的依赖 <!--springboot的必须依赖--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE

  • SpringBoot+MybatisPlus+代码生成器整合示例

    项目目录结构: pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.or

  • SpringBoot 整合 JMSTemplate的示例代码

    1.1 添加依赖   可以手动在 SpringBoot 项目添加依赖,也可以在项目创建时选择使用 ActiveMQ 5 自动添加依赖.高版本 SpringBoot (2.0 以上) 在添加 activemq 连接池依赖启动时会报 Error creating bean with name 'xxx': Unsatisfied dependency expressed through field 'jmsTemplate'; 可以将 activemq 连接池换成 jms 连接池解决. <depen

  • SpringBoot 集成 activiti的示例代码

    SpringBoot 集成 activiti  基础环境搭建 添加依赖 <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>6.0.0</version> </dependency> 添加配置文件 server: tomcat: uri-

  • SpringBoot整合Redis的示例

    redis是最常用的缓存数据库,常用于存储用户登录token.临时数据.定时相关数据等. redis是单线程的,所以redis的操作是原子性的,这样可以保证不会出现并发问题. redis基于内存,速度非常快,据测试,redis读的速度是110000次/s,写的速度是81000次/s 本节介绍SpringBoot引入redis,以及使用RedisTemplate来操作redis数据. 采用SpringBoot 2.1.9.RELEASE,对应示例代码在:https://github.com/lao

  • SpringBoot整合MongoDB的示例

    本节使用SpringBoot 2.1.9.RELEASE,示例源码在https://github.com/laolunsi/spring-boot-examples/tree/master/06-spring-boot-mongo-demo SpringBoot可以非常方便地引入和操作MongoDB.本节分两部分,记录个人学习SpringBoot使用MongoDB数据库的一些知识. 第一部分是一个简单的springboot连接mongo的demo,测试查询功能. 第二部分是基于mongo实现的增

  • SpringBoot整合Swagger2的示例

    一.导入maven包 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <a

  • SpringBoot整合SpringDataRedis的示例代码

      本文介绍下SpringBoot如何整合SpringDataRedis框架的,SpringDataRedis具体的内容在前面已经介绍过了,可自行参考. 1.创建项目添加依赖   创建SpringBoot项目,并添加如下依赖: <dependencies> <!-- springBoot 的启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId

  • SpringBoot Scheduling定时任务的示例代码

    目录 开启定时任务注解@EnableScheduling @Scheduled添加定时任务 Cron表达式 在线cron工具 适应场景 springBoot提供了定时任务的支持,通过注解简单快捷,对于日常定时任务可以使用. 开启定时任务注解@EnableScheduling @EnableScheduling @SpringBootApplication public class DockerApplication { public static void main (String[] args

随机推荐