先上效果图
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
以上就是关于从数据库读取数据,然后就将处理后的数据写入控制台的介绍