SpringBatch
框架。它包含以下主要構建塊
一個 Batch
(批處理)過程由一個 Job
(作業)組成。這個實體封裝了整個批處理過程。
一個 Job
(作業)可以由一個或多個 Step
(步驟)組成。在大多數情況下,一個步驟將讀取數據(通過 ItemReader
),處理數據(使用 ItemProcessor
),然后寫入數據(通過 ItemWriter
)。
JobLauncher
處理啟動一個 Job
(作業)。
JobRepository
存儲關于配置和執行的 Job
(作業)的元數據。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-batch</artifactId> </dependency> <dependency> <groupId>org.springframework.batch</groupId> <artifactId>spring-batch-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>MySQL</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.15</version> </dependency>
創建一個 BatchConfig
類,它將配置Spring Batch。類頂部的@Configuration注解表明Spring可以使用該類作為bean定義的源。
我們添加了@EnableBatchProcessing注解,它支持所有所需 SpringBatch
特性。它還提供了設置批處理作業的基本配置。
通過添加這個注解會需要很多操作。下面是 @EnableBatchProcessing
創建的概述:
JobRepository (bean名稱 "jobRepository")
JobLauncher (bean名稱 "jobLauncher")
JobRegistry (bean名稱 "jobRegistry")
JobExplorer (bean名稱 "jobExplorer")
PlatformTransactionManager (bean名稱 "transactionManager")
JobBuilderFactory (bean名稱"jobBuilders"),它可以方便地防止您必須將作業存儲庫注入到每個Job
(作業)中
StepBuilderFactory (bean名稱 "stepBuilders"),以方便您避免將作業存儲庫和事務管理器注入到每個Step
(步驟)中
為了使 SpringBatch
使用基于Map的 JobRepository
,我們需要擴展 DefaultBatchConfigurer
。重寫 setDataSource()
方法以不設置 DataSource
。這將導致自動配置使用基于Map的 JobRepository
。
import org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer;import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;import org.springframework.context.annotation.Configuration;@Configuration@EnableBatchProcessingpublic class BatchConfig extends DefaultBatchConfigurer {}
@Configurationpublic class HelloWorldJobConfig { @Bean public Job helloWorlJob(JobBuilderFactory jobBuilders, StepBuilderFactory stepBuilders) { return jobBuilders.get("helloWorldJob").start(helloWorldStep(stepBuilders)).build(); } @Bean public Step helloWorldStep(StepBuilderFactory stepBuilders) { return stepBuilders.get("helloWorldStep").<Person, String>chunk(10) .reader(reader()).processor(processor()).writer(writer()).build(); } @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(); } @Bean public PersonItemProcessor processor() { return new PersonItemProcessor(); } @Bean public FlatFileItemWriter<String> writer() { return new FlatFileItemWriterBuilder<String>().name("greetingItemWriter") .resource(new FileSystemResource("txt/greetings.txt")) .lineAggregator(new PassThroughLineAggregator<>()).build(); }}
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; }}
使用 @RunWith
和 @SpringBootTest
測試注解告訴 JUnit
使用Spring的測試支持運行,并使用SpringBoot的支持引導。
SpringBatch
附帶一個 JobLauncherTestUtils
實用程序類,用于測試批處理作業。
我們首先創建一個內部 BatchTestConfig
類,將helloWorld作業添加到 JobLauncherTestUtils
bean中。然后使用此bean的 launchJob()
方法運行批處理作業。
如果執行的作業沒有任何錯誤,則 ExitCode
的值為 COMPLETED
。
@RunWith(SpringRunner.class)@SpringBootTest(classes = {XcSpringbootApplicationTests.BatchTestConfig.class})public class XcSpringbootApplicationTests { @Autowired private JobLauncherTestUtils jobLauncherTestUtils; @Test public void testHelloWorldJob() throws Exception { JobExecution jobExecution = jobLauncherTestUtils.launchJob(); assertThat(jobExecution.getExitStatus().getExitCode()).isEqualTo("COMPLETED"); } @Configuration @Import({BatchConfig.class, HelloWorldJobConfig.class}) static class BatchTestConfig { @Autowired private Job helloWorlJob; @Bean JobLauncherTestUtils jobLauncherTestUtils() throws NoSuchJobException { JobLauncherTestUtils jobLauncherTestUtils = new JobLauncherTestUtils(); jobLauncherTestUtils.setJob(helloWorlJob); return jobLauncherTestUtils; } }}
參考:https://codenotfound.com/spring-batch-example.html
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
沈陽市疾病防控中心的地址?遼寧省疾病預防控制中心(沙洋路)地址:遼寧省沈陽市沙洋路242號,沙洋路以北,南京南街以東。沈陽市疾病預防控制中心地址:皇姑區岐山中路37號,岐山一中門前岐山路東南一點。沈陽市疾病防控中心的地址?沈陽市疾病預防控制中心位于沈陽市皇姑區長江街19號(皇姑交警大隊斜對面)。...
如何登陸網頁yy?1.一般登錄yy都是通過yy通;2.登錄后點擊yy安全中心;3.點擊賬戶管理;4.點擊打開yy登錄;5.如果成功開通,可以登錄賬號,也不怕忘記通行證。YY在那里登陸/?該方法如下:1.一般登錄YY都是通過YY關口;2.登錄后點擊YY安全中心;3.點擊賬戶管理;4.點擊打開YY號碼登錄;5.如果成功開通,可以登錄賬號,也不怕忘記通行證。怎么在網頁上登陸賬號看YY直播?1.一般登錄Y...
巴西龜的智商相當于人的幾歲?海龜的智商很低,還不到一歲小孩的智商。它們養的時候需要很長時間才能分辨主人,巴西龜是智商最高的龜。如果你買了一只小巴西龜,開始飼養,你必須每天自己喂它,這樣它才能把你和別人區分開來,知道你是主人。因為巴西龜能記住主人,所以能和它培養感情。熟悉之后可以放在家里,休息的時候不會打擾你。我甚至會像狗一樣把它帶在身邊,在你出門后老實待著,等你回來在門口等你。至于更科學、更有根據...