spring batch简单使用(基于springboot)从数据库读取控制台打印
先上效果图


db脚本,直接数据库执行就好
/* SQLyog Ultimate v11.24 (32 bit) MySQL - 5.6.51 : Database - spring_batch ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; CREATE DATABASE /*!32312 IF NOT EXISTS*/`spring_batch` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `spring_batch`; /*Table structure for table `tutorials` */ DROP TABLE IF EXISTS `tutorials`; CREATE TABLE `tutorials` ( `tutorial_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键', `tutorial_author` varchar(20) CHARACTER SET latin1 DEFAULT NULL COMMENT '作者', `tutorial_title` varchar(20) CHARACTER SET latin1 DEFAULT NULL COMMENT '题目', `submission_date` varchar(20) CHARACTER SET latin1 DEFAULT NULL COMMENT '提交时间', PRIMARY KEY (`tutorial_id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; /*Data for the table `tutorials` */ insert into `tutorials`(`tutorial_id`,`tutorial_author`,`tutorial_title`,`submission_date`) values (1,'Sanjay','Learn Java','2023-04-30 15:14:26'),(2,'Abdul S','Learn MySQL','2023-04-30 15:14:26'),(3,'Krishna Kasyap','Learn JavaFX','2023-04-30 15:14:26'); /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
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.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.java</groupId>
<artifactId>springbatch-service</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<jdk.version>1.8</jdk.version>
</properties>
<dependencies>
<!--移除tomcat容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--加入undertow-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>
</dependencies>
<build>
<finalName>spring-batch</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<downloadSources>true</downloadSources>
<downloadJavadocs>false</downloadJavadocs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
代码部分
#开发配置 #数据库连接参数的配置 spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3310/spring_batch?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.username=spring spring.datasource.password=123456 #项目启动时的建表sql脚本,该脚本由Spring Batch提供 spring.datasource.schema=classpath:/org/springframework/batch/core/schema-mysql.sql #在项目启动时进行执行建表sql #是否生成执行状态记录的表结构 spring.batch.initialize-schema=always #禁止Spring Batch自动执行,既需要用户触发才能执行 spring.batch.job.enabled=true logging.level.com.java=debug logging.level.web=debug spring.devtools.add-properties=false
package com.java.tutorials.batch;
import lombok.Data;
/**
* @Description:
* @Author: qiuxie
* @Create: 2023/4/30 15:25
*/
@Data
public class Tutorial {
private int tutorialId;
private String tutorialTitle;
private String tutorialAuthor;
private String submissionDate;
}
package com.java.tutorials.batch;
/**
* @Description:
* @Author: qiuxie
* @Create: 2023/5/4 21:11
*/
public class TutorialBatchJobConstant {
public static final String STEP = "step";
}
package com.java.tutorials.batch;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.item.ItemProcessor;
/**
* @Description:
* @Author: qiuxie
* @Create: 2023/5/1 14:42
*/
@Slf4j
public class TutorialProcessor implements ItemProcessor<Tutorial,Tutorial> {
@Override
public Tutorial process(Tutorial tutorial) throws Exception {
Tutorial tutorialData=new Tutorial();
if (tutorial.getTutorialId()>2){
return tutorial;
}
return tutorialData;
}
}
package com.java.tutorials.batch;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @Description:
* @Author: qiuxie
* @Create: 2023/5/4 21:23
*/
@Slf4j
public class TutorialRowMapper implements RowMapper<Tutorial> {
@Override
public Tutorial mapRow(ResultSet rs, int rowNum) throws SQLException {
Tutorial tutorial=new Tutorial();
tutorial.setTutorialId(rs.getInt("tutorial_id"));
tutorial.setTutorialTitle(rs.getString("tutorial_title"));
tutorial.setTutorialAuthor(rs.getString("tutorial_author"));
tutorial.setSubmissionDate(rs.getString("submission_date"));
return tutorial;
}
}
package com.java.tutorials.batch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemWriter;
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.util.List;
/**
* @Description:
* @Author: qiuxie
* @Create: 2023/5/1 12:34
*/
@Configuration
public class TutorialBatchJob {
private final Logger log = LoggerFactory.getLogger(TutorialBatchJob.class);
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private DataSource dataSource;
private String JOB = "job";
/**
* 配置一个Job
*
* @return
*/
@Bean
public Job job() {
long timeMillis = System.currentTimeMillis();
String name=JOB+timeMillis;
return jobBuilderFactory.get(name)
.start(step())
.build();
}
/**
* 配置一个Step
*
* @return
*/
@Bean(name = TutorialBatchJobConstant.STEP)
public Step step() {
return stepBuilderFactory.get(TutorialBatchJobConstant.STEP)
//表示一次读取多少的数据
.<Tutorial, Tutorial>chunk(2)
.reader(itemReader())
.processor(processor())
.writer(itemWriter())
.build();
}
@Bean
public TutorialRowMapper tutorialRowMapper() {
return new TutorialRowMapper();
}
/**
* 配置itemReader
*
* @return
*/
@Bean("itemReader")
@StepScope
public JdbcCursorItemReader<Tutorial> itemReader() {
log.info("开始查询数据库");
JdbcCursorItemReaderBuilder<Tutorial> readerBuilder = new JdbcCursorItemReaderBuilder<>();
JdbcCursorItemReader<Tutorial> build = readerBuilder
.name("qwe")
.dataSource(dataSource)
.sql("SELECT tutorial_id,tutorial_author,tutorial_title,submission_date FROM tutorials")
.rowMapper(tutorialRowMapper())
.build();
return build;
}
@Bean
public ItemProcessor<Tutorial, Tutorial> processor() {
return new TutorialProcessor();
}
@Bean
public ItemWriter<Tutorial> itemWriter(){
ItemWriter<Tutorial> itemWriter = new ItemWriter<Tutorial>() {
@Override
public void write(List<? extends Tutorial> list) throws Exception {
list.stream().forEach(a->{
if (null!=a.getTutorialTitle()){
log.info("数据写出:{}",a);
}
});
}
};
return itemWriter;
}
}
以上环境基于jdk1.8,mysql 5.6,maven 3.5.4,springboot 2.7




以上就是关于从数据库读取数据,然后就将处理后的数据写入控制台的介绍
浙公网安备 33010602011771号