SpringBoot批處理的實現(xiàn)示例
Spring Batch是一個開源 的、全面的、輕量級的批處理框架,通過Spring Boot 可以實現(xiàn)強大的批處理應用程序開發(fā)。
Spring Batch提供了ItemReader、ItemProcessor和ItemWriter來完成數(shù)據(jù)的讀取、處理及寫出操作,并且可以將批處理的執(zhí)行狀態(tài) 持久化到數(shù)據(jù)庫中。
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 #項目啟動時創(chuàng)建數(shù)據(jù)表的SQL腳本 spring.datasource.schema=classpath:/org/springframework/batch/core/schema-mysql.sql #項目啟動時執(zhí)行建表SQL spring.batch.initialize-schema=always #配置后不會自動執(zhí)行 spring.batch.job.enabled=false
3.在項目啟動類上添加@EnableBatchProcessing注解開開啟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.實體類
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ù)庫會增加一些自動創(chuàng)建到表,但是User表不能自動創(chuàng)建和字段需要提前設置,否則會出現(xiàn)錯誤,還需要進一步處理,待完成。暫做標記!
到此這篇關(guān)于SpringBoot批處理的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot批處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java后臺實現(xiàn)js關(guān)閉本頁面,父頁面指定跳轉(zhuǎn)或刷新操作
這篇文章主要介紹了java后臺實現(xiàn)js關(guān)閉本頁面,父頁面指定跳轉(zhuǎn)或刷新操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Java高性能新一代構(gòu)建工具Maven-mvnd(實踐可行版)
這篇文章主要介紹了Java高性能新一代構(gòu)建工具Maven-mvnd(實踐可行版),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06

