首页 > 数据库 >SpringBatch读取mysql数据

SpringBatch读取mysql数据

时间:2023-08-12 18:35:30浏览次数:31  
标签:读取 mysql batch springframework user org import SpringBatch public

1.在本地数据库创建user表

建表语句:

create table `user`(
    `id` bigint not null auto_increment comment '主键',
    `name` varchar(32) default null comment '用户名',
    `age` int default null comment '年龄',
    primary key(id)
)engine=innodb  default  char set =utf8mb4;

新增数据:

insert into `user` (`name`,`age`) values
('dafei',15),('erfei',16),('sanfei',17),('sifei',18),('wufei',19);

示例:

SpringBatch读取mysql数据_sql

需求:将SpringBatch库中user表的数据通过Springbatch读取到控制台中

SpringBatch提供了两种方法帮助我们从数据库中读取数据。

1.基于游标的方式

定义:一条一条的读数据,读完一条再读下一条。

流程:读数据=>封装=>读入

封装条件:如果我们使用JDBC读取数据,游标会将那条数据封装到ResultSet中,如果想从ResultSet中将数据读取出来,我们需要借助SpringBatch的RowMapper类实现表数据与实体对象的映射。

具体实现:

创建user对象

package com.pjk.springBatch.demo2;

import lombok.Data;

@Data
public class User {
    private Long id;
    private String name;
    private int age;
}

创建映射对象

package com.pjk.springBatch.demo2;

import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 创建映射对象
 */
public class UserRowMapper implements RowMapper<User> {
    @Override
    public User mapRow(ResultSet rs, int rowNum) throws SQLException {

        User user = new User();
        user.setId(rs.getLong("id"));
        user.setName(rs.getString("name"));
        user.setAge(rs.getInt("age"));
        return user;
    }
}

具体代码实现:

package com.pjk.springBatch.demo2;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.item.*;
import org.springframework.batch.item.database.JdbcCursorItemReader;
import org.springframework.batch.item.database.builder.JdbcCursorItemReaderBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;
import java.util.List;

@EnableBatchProcessing//3.开启springbatch
@SpringBootApplication//2.开启springboot
public class SpringBatchMysqlDemo {//1.创建类
    public static void main(String[] args) {
        SpringApplication.run(SpringBatchMysqlDemo.class, args);//4.创建启动主方法
    }
    @Autowired
    private JobBuilderFactory jobBuilderFactory;//5.创建job工厂

    @Autowired
    private StepBuilderFactory stepBuilderFactory;//6.创建step工厂

    @Autowired//18.创建数据源对象
    private DataSource dataSource;

    @Bean//21.创建映射对象
    public UserRowMapper userRowMapper() {
        return new UserRowMapper();
    }


    @Bean//23.创建写对象
    public ItemWriter<User> itemWrite() {
        return new ItemWriter<User>() {
            @Override
            public void write(List<? extends User> list) throws Exception {
                list.forEach(System.out::println);//24.写的具体逻辑
            }
        };
    }


    @Bean//15.创建读取数据对象
    public JdbcCursorItemReader<User> itemReader() {
        return new JdbcCursorItemReaderBuilder<User>()
                //16.起个名字
                .name("userItemReader")
                //17.连接数据库
                .dataSource(dataSource)
                //19.执行sql语句
                .sql("select * from user")//以游标的方式一条一条的从user中读取数据
                //20.指定映射对象
                .rowMapper(userRowMapper())
                .build();


    }


    @Bean//10.创建一个step
    public Step step() {
        return stepBuilderFactory.get("stepOne")//11.给step起名字
                .allowStartIfComplete(true)//12.允许step运行完之后 可以再次运行
                .<User,User>chunk(1)//13.开启块处理模式
                .reader(itemReader())//14.块处理中第一步读取数据
                .writer(itemWrite())//22.块处理中第二步写数据
                .build();
    }
    
    @Bean//7.创建job
    public Job job() {
        return jobBuilderFactory.get("job")//8.给job起名字
                .start(step())//9.执行第一个任务
                .incrementer(new RunIdIncrementer())//25.允许job多次启动不手动修改job名
                .build();
    }
}

结果展示:

SpringBatch读取mysql数据_User_02

标签:读取,mysql,batch,springframework,user,org,import,SpringBatch,public
From: https://blog.51cto.com/u_16205743/7060714

相关文章

  • 10 张图帮你搞定 TensorFlow 数据读取机制
    在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解。确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料。今天这篇文章就以图片的形式,用最简单的语言,为大家详细解释一下tensorflow的数据读取机制,文章的最后还会给出实战代码以供参考。一、tensorflow读取......
  • SpringBatch连接mysql
    1.添加依赖一个是SpringBatch依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-batch</artifactId></dependency>一个是mysql依赖<dependency><......
  • 搭建My Batis(Maven + MySql + log4j)
    前言MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(PlainOrdinaryJavaObject,普通的Java对象)映......
  • 解决linux mysql命令 bash mysql command not found 的方法
    错误:root@DB-02~]#mysql-uroot-bash:mysql:commandnotfound原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件。首先得知道mysql命令或mysqladmin命令的完整路......
  • # yyds干货盘点 #通过pandas读取列的数据怎么把一列中的负数全部转为正数?
    大家好,我是皮皮。一、前言前几天在Python最强王者群【wen】问了一个pandas数据处理的问题,一起来看看吧。二、实现过程这里【隔壁......
  • go项目实现mysql接入以及web api
    创建go项目,并在go项目中接入mysql,将mysql的配置项单独整理放到一个胚子和文件中,支持项目启动时,通过加载配置文件中的值,然后创建数据库连接。之后使用net/http相关的库,创建路由,并在路由中通过不同的http方法,实现mysql连接的test数据库中users表的增删改查的webapi1.在ide......
  • MySQL 设置 IP 白名单
    1.登录MySQLmysql-uroot-p2.新增用户并授予权限MySQL8之前:grantallon*.*to'username'@'ip'identifiedby'password'withgrantoption;MySQL8开始:createuser'username'@'ip'identifiedwithmysql_native_pa......
  • # yyds干货盘点 # 盘点一个dataframe读取csv文件失败的问题
    大家好,我是皮皮。一、前言前几天在Python钻石群【心田有垢生荒草】问了一个Pandas数据处理的问题,一起来看看吧。大佬们求教个方法 现在有个数据量很大的dataframe 要吐csv格式 但结果总是串行 加了encoding='utf-8'还是没解决 还有其他方法么?下图是他提供的图片:二、实现......
  • MySQL数据库笔记(二)
    聚集函数聚集函数:SQL提供的方法统计函数count(字段):统计表中记录的个数.语法: selectcount(*)from表名; 练习: --统计exam中有多少个学生: selectcount(name)fromtb_exam; selectcount(id)fromtb_exam; selectcount(*)fromtb_exam;--根据任意字段进行统计......
  • Python 读取 Arduino 串口数据
    serial读取串口数据初始化serimportserialser=serial.Serial('com1',9600,timeout=1)初始化的参数ser=serial.Serial(port=None,#numberofdevice,numberingstartsat#zero.ifeverythingfails,theuser#canspecifyadevicestring,......