欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2020年09月01日 09:29:34   作者:沸羊羊_  
這篇文章主要介紹了手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、概述

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

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

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

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


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

一個(gè)Job(作業(yè))可以由一個(gè)或多個(gè)Step(步驟)組成。在大多數(shù)情況下,一個(gè)步驟將讀取數(shù)據(jù)(通過(guò)ItemReader),處理數(shù)據(jù)(使用ItemProcessor),然后寫(xiě)入數(shù)據(jù)(通過(guò)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)目傳送門(mén)

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

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

2.1 在新建項(xiàng)目時(shí)添加依賴(lài)了,就會(huì)發(fā)現(xiàn)pom中引入了 spring-barch的相關(guān)依賴(lài),如新建項(xiàng)目時(shí)沒(méi)有添加依賴(lài),則需要手動(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ù)庫(kù)連接自動(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.java
public class Person {
 private String firstName;
 private String lastName;
}
//構(gòu)造函數(shù),get,set方法, toString()方法略

2.4 配置 Spring Batch Job

2.4.1 新建 BatchConfig 類(lèi),重寫(xiě)父類(lèi) setDataSource 方法

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

2.4.2 新建 HelloWorldJobConfig 類(lèi),配置 job ,step

//HelloWorldJobConfig.java
@Configuration
public 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();
 }
 //寫(xiě)入數(shù)據(jù),指定寫(xiě)入路徑文件
 @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.java
public 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.java
public 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é)果。

三、理解

JobRepository

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

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ù)庫(kù)同步,從 A 數(shù)據(jù)庫(kù)讀取數(shù)據(jù),存入到 B 數(shù)據(jù)庫(kù)中,這里就分為了兩個(gè)步驟。在 Spring Batch 中,一個(gè)任務(wù)可以有很多個(gè)步驟,每個(gè)步驟大致分為三步:讀、處理、寫(xiě),其對(duì)應(yīng)的類(lèi)分別就是 Item Reader,Item Processor,Item Writer。

JobLauncher

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

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

相關(guān)文章

  • RocketMQ實(shí)現(xiàn)消息分發(fā)的步驟

    RocketMQ實(shí)現(xiàn)消息分發(fā)的步驟

    RocketMQ 實(shí)現(xiàn)消息分發(fā)的核心機(jī)制是通過(guò) Topic、Queue 和 Consumer Group 的配合實(shí)現(xiàn)的,下面給大家介紹RocketMQ實(shí)現(xiàn)消息分發(fā)的步驟,感興趣的朋友一起看看吧
    2024-03-03
  • Spring之@Qualifier注解的具體使用

    Spring之@Qualifier注解的具體使用

    本文主要介紹了Spring之@Qualifier注解的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 收集的一些常用java正則表達(dá)式

    收集的一些常用java正則表達(dá)式

    收集的一些常用java正則表達(dá)式,需要的朋友可以參考一下
    2013-02-02
  • Java關(guān)鍵字之this用法詳解

    Java關(guān)鍵字之this用法詳解

    這篇文章將為大家詳細(xì)介紹一下Java關(guān)鍵字this的用法,文中有相關(guān)的代碼示例,希望對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以參考下
    2023-05-05
  • RabbitMQ消費(fèi)端ACK NACK及重回隊(duì)列機(jī)制詳解

    RabbitMQ消費(fèi)端ACK NACK及重回隊(duì)列機(jī)制詳解

    這篇文章主要為大家介紹了RabbitMQ消費(fèi)端ACK NACK及重回隊(duì)列機(jī)制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Java實(shí)現(xiàn)斗地主案例

    Java實(shí)現(xiàn)斗地主案例

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)斗地主案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • IDEA如何實(shí)現(xiàn)批量修改變量名

    IDEA如何實(shí)現(xiàn)批量修改變量名

    這篇文章主要介紹了IDEA如何實(shí)現(xiàn)批量修改變量名問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Spring Native實(shí)現(xiàn)0.059s啟動(dòng)一個(gè)SpringBoot項(xiàng)目

    Spring Native實(shí)現(xiàn)0.059s啟動(dòng)一個(gè)SpringBoot項(xiàng)目

    Spring Native是Spring框架的一個(gè)子項(xiàng)目,旨在提供一種將Spring應(yīng)用程序編譯為本地可執(zhí)行文件的方法,從而提高啟動(dòng)時(shí)間和資源效率,本文主要介紹了Spring Native實(shí)現(xiàn)0.059s啟動(dòng)一個(gè)SpringBoot項(xiàng)目,感興趣的可以了解一下
    2024-02-02
  • springBoot?之spring.factories擴(kuò)展機(jī)制示例解析

    springBoot?之spring.factories擴(kuò)展機(jī)制示例解析

    這篇文章主要為大家介紹了springBoot?之spring.factories擴(kuò)展機(jī)制示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 關(guān)于Java的Character類(lèi)詳解

    關(guān)于Java的Character類(lèi)詳解

    這篇文章主要介紹了關(guān)于Java的Character類(lèi)詳解,Java中的Character類(lèi)是一個(gè)包裝類(lèi),用于封裝一個(gè)基本數(shù)據(jù)類(lèi)型char的值,它提供了一些靜態(tài)方法來(lái)操作字符,需要的朋友可以參考下
    2023-05-05

最新評(píng)論