成人视屏在线观看-国产99精品-国产精品1区2区-欧美一级在线观看-国产一区二区日韩-色九九九

您的位置:首頁技術(shù)文章
文章詳情頁

手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟

瀏覽:13日期:2023-08-17 17:52:54

一、概述

Spring Batch是一個(gè)輕量級(jí),全面的批處理框架。

一個(gè)典型的批處理過程可能是:

從數(shù)據(jù)庫,文件或隊(duì)列中讀取大量記錄。 以某種方式處理數(shù)據(jù)。 以修改之后的形式寫回?cái)?shù)據(jù)

Spring Batch 應(yīng)用架構(gòu)圖:

手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟

一個(gè)Batch(批處理)過程由一個(gè)Job(作業(yè))組成。這個(gè)實(shí)體封裝了整個(gè)批處理過程。

一個(gè)Job(作業(yè))可以由一個(gè)或多個(gè)Step(步驟)組成。在大多數(shù)情況下,一個(gè)步驟將讀取數(shù)據(jù)(通過ItemReader),處理數(shù)據(jù)(使用ItemProcessor),然后寫入數(shù)據(jù)(通過ItemWriter)。

JobLauncher處理啟動(dòng)一個(gè)Job(作業(yè))。

最后,JobRepository存儲(chǔ)關(guān)于配置和執(zhí)行的Job(作業(yè))的元數(shù)據(jù)。

二、實(shí)例

1、新建 springboot項(xiàng)目

創(chuàng)建項(xiàng)目傳送門

選擇配置,添加依賴,GENERATE 后導(dǎo)入到你的IDE

手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟

2、springboot 項(xiàng)目配置

2.1 在新建項(xiàng)目時(shí)添加依賴了,就會(huì)發(fā)現(xiàn)pom中引入了 spring-barch的相關(guān)依賴,如新建項(xiàng)目時(shí)沒有添加依賴,則需要手動(dòng)添加。

//pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-batch</artifactId></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></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

2.2 為主程序的@SpringBootApplication注解添加exclude屬性,可以防止 SpringBoot 為數(shù)據(jù)庫連接自動(dòng)配置 DataSource

//主程序@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)public class Springbatch2020829Application {public static void main(String[] args) {SpringApplication.run(Springbatch2020829Application.class, args);}}

2.3 新建實(shí)體model

//Person.javapublic class Person { private String firstName; private String lastName;}//構(gòu)造函數(shù),get,set方法, toString()方法略

2.4 配置 Spring Batch Job

2.4.1 新建 BatchConfig 類,重寫父類 setDataSource 方法

//BatchConfig.java@Configuration@EnableBatchProcessingpublic class BatchConfig extends DefaultBatchConfigurer { @Override public void setDataSource(DataSource dataSource) { }}

2.4.2 新建 HelloWorldJobConfig 類,配置 job ,step

//HelloWorldJobConfig.java@Configurationpublic class HelloWorldJobConfig { //新建 Job,Spring 將自動(dòng)注入 jobBuilders ,stepBuilders兩個(gè) beans @Bean public Job helloWorlJob(JobBuilderFactory jobBuilders, StepBuilderFactory stepBuilders) { return jobBuilders.get('helloWorldJob') .start(helloWorldStep(stepBuilders)).build(); } //新建 Step,使用 StepBuilderFactory 創(chuàng)建 @Bean public Step helloWorldStep(StepBuilderFactory stepBuilders) { return stepBuilders.get('helloWorldStep') .<Person, String>chunk(10).reader(reader()) .processor((Function<? super Person, ? extends String>) processor()).writer(writer()).build(); } //讀取數(shù)據(jù),指定需要讀取的資源 @Bean public FlatFileItemReader<Person> reader() { return new FlatFileItemReaderBuilder<Person>() .name('personItemReader') .resource(new ClassPathResource('csv/persons.csv')) .delimited().names(new String[] {'firstName', 'lastName'}) .targetType(Person.class).build(); } //處理數(shù)據(jù) @Bean public PersonItemProcessor processor() { return new PersonItemProcessor(); } //寫入數(shù)據(jù),指定寫入路徑文件 @Bean public FlatFileItemWriter<String> writer() { return new FlatFileItemWriterBuilder<String>() .name('greetingItemWriter') .resource(new FileSystemResource( 'target/test-outputs/greetings.txt')) .lineAggregator(new PassThroughLineAggregator<>()).build(); }}

2.5 處理數(shù)據(jù)

//PersonItemProcessor.javapublic class PersonItemProcessor implements ItemProcessor<Person, String> { private static final Logger LOGGER = LoggerFactory.getLogger(PersonItemProcessor.class); //打印日志信息 @Override public String process(Person person) throws Exception { String greeting = 'Hello ' + person.getFirstName() + ' ' + person.getLastName() + '!'; LOGGER.info('converting ’{}’ into ’{}’', person, greeting); return greeting; }}

2.6 測(cè)試 Spring Batch 示例

//PersonItemProcessor.javapublic class PersonItemProcessor implements ItemProcessor<Person, String> { private static final Logger LOGGER = LoggerFactory.getLogger(PersonItemProcessor.class); //打印日志信息 @Override public String process(Person person) throws Exception { String greeting = 'Hello ' + person.getFirstName() + ' ' + person.getLastName() + '!'; LOGGER.info('converting ’{}’ into ’{}’', person, greeting); return greeting; }}

2.7 啟動(dòng)項(xiàng)目,在 target/test-outputs/greetings.txt 文件中找到結(jié)果。

手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟

三、理解

JobRepository

從字面上可以理解為'任務(wù)倉庫',如果把一個(gè)批處理比作一個(gè)任務(wù)的話,這個(gè)倉庫存儲(chǔ)了很多這種任務(wù)。JobRepository 會(huì)將任務(wù)包括其狀態(tài)等數(shù)據(jù)持久化,存儲(chǔ)到許多數(shù)據(jù)庫中。Spring Batch 默認(rèn)會(huì)提供一個(gè) SimpleJobRepository 倉庫,方便我們開啟批處理。

Job

“任務(wù)”。每個(gè)批處理都是一個(gè)任務(wù),除了任務(wù)本身之外,任務(wù)也存在成功和失敗等等狀態(tài),所以可以引出兩個(gè)概念 JobInstance 與 JobExecution 。job 是一個(gè)接口,JobInstance 是其實(shí)現(xiàn),代表了“任務(wù)”本身,提供了 getJobName、getInstanceId 等方法供我們獲取任務(wù)本身的一些屬性。JobExecution 代表任務(wù)的狀態(tài),如創(chuàng)建時(shí)間、結(jié)束時(shí)間、結(jié)束狀態(tài)、拋出的異常等等。

Step

“步驟”。批處理任務(wù)肯定有非常多的步驟,如一個(gè)最基本的數(shù)據(jù)庫同步,從 A 數(shù)據(jù)庫讀取數(shù)據(jù),存入到 B 數(shù)據(jù)庫中,這里就分為了兩個(gè)步驟。在 Spring Batch 中,一個(gè)任務(wù)可以有很多個(gè)步驟,每個(gè)步驟大致分為三步:讀、處理、寫,其對(duì)應(yīng)的類分別就是 Item Reader,Item Processor,Item Writer。

JobLauncher

“任務(wù)裝置”。如火箭發(fā)射裝置就是用來操作火箭發(fā)射的,這里的任務(wù)裝置就是用來執(zhí)行任務(wù)的。

到此這篇關(guān)于手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟的文章就介紹到這了,更多相關(guān)Spring Batch項(xiàng)目搭建內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 在线观看二区三区午夜 | 日本欧美做爰全免费的视频 | 久久综合狠狠综合久久97色 | 亚洲国产99在线精品一区二区 | 综合久久久久久中文字幕 | 在线观看亚洲视频 | 日本加勒比网站 | 日本免费视频观看在线播放 | 在线视频欧美亚洲 | 99热精品在线免费观看 | 亚洲欧美日韩高清综合678 | 欧美精品一区二区三区免费 | 在线aaa | 天天看片天天爽 | 国产在线高清不卡免费播放 | 国产精品理论 | 另类视频欧美 | 一区二区三区精品国产欧美 | www.女人的天堂.com | 免费看 s色| 国产欧美日韩免费一区二区 | 久久久久欧美国产精品 | 免费伦费一区二区三区四区 | 欧美国产日韩在线播放 | 欧美一级精品高清在线观看 | 免费国产不卡午夜福在线 | 欧美日韩国产高清一区二区三区 | 日韩在线手机看片免费看 | 高清成人 | 另类二区三四 | 亚洲免费在线 | 成人看片黄a免费 | 高清毛片一区二区三区 | 女高中生被cao到哭视频 | 欧洲亚洲一区二区三区 | 国产67194| 天堂av影院 | 三级网站视频在线观看 | 久久99久久精品免费思思 | 久久久久视频精品网 | 国产精品黄页网站在线播放免费 |