SpringBoot批處理的實(shí)現(xiàn)示例
Spring Batch是一個(gè)開(kāi)源 的、全面的、輕量級(jí)的批處理框架,通過(guò)Spring Boot 可以實(shí)現(xiàn)強(qiáng)大的批處理應(yīng)用程序開(kāi)發(fā)。
Spring Batch提供了ItemReader、ItemProcessor和ItemWriter來(lái)完成數(shù)據(jù)的讀取、處理及寫(xiě)出操作,并且可以將批處理的執(zhí)行狀態(tài) 持久化到數(shù)據(jù)庫(kù)中。
https://spring.io/projects/spring-batch
1.添加依賴
<dependency> ?? ?<groupId>org.springframework.boot</groupId> ?? ?<artifactId>spring-boot-starter-batch</artifactId> </dependency> <dependency> ?? ?<groupId>org.springframework.boot</groupId> ?? ?<artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> ?? ?<groupId>com.alibaba</groupId> ?? ?<artifactId>druid-spring-boot-starter</artifactId> ?? ?<version>1.1.9</version> </dependency> <dependency> ?? ?<groupId>mysql</groupId> ?? ?<artifactId>mysql-connector-java</artifactId> </dependency>
2.添加配置 信息
server.port=9000 spring.http.encoding.force-response=true spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.url=jdbc:mysql:///batch spring.datasource.username = root spring.datasource.password = kangxg198811 #項(xiàng)目啟動(dòng)時(shí)創(chuàng)建數(shù)據(jù)表的SQL腳本 spring.datasource.schema=classpath:/org/springframework/batch/core/schema-mysql.sql #項(xiàng)目啟動(dòng)時(shí)執(zhí)行建表SQL spring.batch.initialize-schema=always #配置后不會(huì)自動(dòng)執(zhí)行 spring.batch.job.enabled=false
3.在項(xiàng)目啟動(dòng)類上添加@EnableBatchProcessing注解開(kāi)開(kāi)啟Spring Batch支持
@SpringBootApplication @EnableBatchProcessing public class BatchApplication { public static void main(String[] args) { SpringApplication.run(BatchApplication.class, args); } }
4.配置批處理
@Configuration public class CsvBatchJobConfig { @Autowired JobBuilderFactory jobBuilderFactory; @Autowired StepBuilderFactory stepBuilderFactory; @Autowired DataSource dataSource; class CustomLineCallbackHandler implements LineCallbackHandler{ @Override public void handleLine(String result) { System.out.println(result); } } @Bean ItemReader<User> itemReader() { FlatFileItemReader<User> reader = new FlatFileItemReader<User>(); reader.setLinesToSkip(1); reader.setResource(new ClassPathResource("data.csv")); reader.setLineMapper(new DefaultLineMapper<User>(){ { setLineTokenizer(new DelimitedLineTokenizer(){{ setNames(new String[]{"id","username","address","gender"}); //setDelimiter("\t"); }}); setFieldSetMapper(new BeanWrapperFieldSetMapper<User>(){{ setTargetType(User.class); }}); } }); reader.setSkippedLinesCallback(new CustomLineCallbackHandler()); return reader; } @Bean JdbcBatchItemWriter jdbcBatchItemWriter() { JdbcBatchItemWriter writer = new JdbcBatchItemWriter(); writer.setDataSource(dataSource); writer.setSql("insert into user(id,username,address,gender)" + "values(:id,:username,:address,:gender)"); writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider()); return writer; } @Bean Step csvStep() { return stepBuilderFactory.get("csvStep") .<User,User>chunk(2) .reader(itemReader()) .writer(jdbcBatchItemWriter()) .build(); } @Bean Job csvJob() { return jobBuilderFactory.get("csvJob") .start(csvStep()) .build(); } }
5.實(shí)體類
public class User { private Integer id; private String username; private String address; private String gender; public User(Integer id,String username,String address,String gender) { this.username= username; this.id = id; this.address = address; this.gender = gender; } public User() { super(); } public void setId(Integer id) { this.id = id; } public void setUsername(String username) { this.username = username; } public void setGender(String gender) { this.gender = gender; } public void setAddress(String address) { this.address = address; } public String getUsername() { return username; } public String getGender() { return gender; } public Integer getId() { return id; } public String getAddress() { return address; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", address='" + address + '\'' + ", gender='" + gender + '\'' + '}'; } }
6.創(chuàng)建Controller
@RestController public class BatchController { @Autowired JobLauncher jobLauncher; @Autowired Job job; @GetMapping("/batch") public void batch() { try { jobLauncher.run(job,new JobParametersBuilder().toJobParameters()); }catch (Exception e) { e.printStackTrace(); } } }
這里配置就結(jié)束了,數(shù)據(jù)庫(kù)會(huì)增加一些自動(dòng)創(chuàng)建到表,但是User表不能自動(dòng)創(chuàng)建和字段需要提前設(shè)置,否則會(huì)出現(xiàn)錯(cuò)誤,還需要進(jìn)一步處理,待完成。暫做標(biāo)記!
到此這篇關(guān)于SpringBoot批處理的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot批處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring boot注解@Async線程池實(shí)例詳解
這篇文章主要介紹了Spring boot注解@Async線程池實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Netty分布式Server啟動(dòng)流程服務(wù)端初始化源碼分析
本章主要講解server啟動(dòng)的關(guān)鍵步驟,?讀者只需要了解server啟動(dòng)的大概邏輯,?知道關(guān)鍵的步驟在哪個(gè)類執(zhí)行即可,?并不需要了解每一步的運(yùn)作機(jī)制,?之后會(huì)對(duì)每個(gè)模塊進(jìn)行深度分析2022-03-03java后臺(tái)實(shí)現(xiàn)js關(guān)閉本頁(yè)面,父頁(yè)面指定跳轉(zhuǎn)或刷新操作
這篇文章主要介紹了java后臺(tái)實(shí)現(xiàn)js關(guān)閉本頁(yè)面,父頁(yè)面指定跳轉(zhuǎn)或刷新操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11Java高性能新一代構(gòu)建工具M(jìn)aven-mvnd(實(shí)踐可行版)
這篇文章主要介紹了Java高性能新一代構(gòu)建工具M(jìn)aven-mvnd(實(shí)踐可行版),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06將下載好的jar包導(dǎo)入到本地maven倉(cāng)庫(kù)中操作
這篇文章主要介紹了將下載好的jar包導(dǎo)入到本地maven倉(cāng)庫(kù)中操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08Springboot啟動(dòng)執(zhí)行特定代碼的方式匯總
這篇文章主要介紹了Springboot啟動(dòng)執(zhí)行特定代碼的幾種方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12