Giriş
Şu satırı dahil ederiz
Şu satırı dahil ederiz
import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder;
Bu sınıf ile bir FlatFileItemReader yani ItemReader yaratılır.
setLineMapper metodu - DefaultLineMapper
DefaultLineMapper verilebilir.
Örnek - FieldSetMapper'dan Kalıtım
Kendi Customer sınıfımızı CSV dosyasından okumak için şöyle yaparız.
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
@Bean
public FlatFileItemReader<Customer> customerItemReader(){
FlatFileItemReader<Customer> reader = new FlatFileItemReader<>();
reader.setLinesToSkip(1);
reader.setResource(new ClassPathResource("/data/customer.csv"));
DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
tokenizer.setNames(new String[] {"id", "firstName", "lastName", "birthdate"});
DefaultLineMapper<Customer> customerLineMapper = new DefaultLineMapper<>();
customerLineMapper.setLineTokenizer(tokenizer);
customerLineMapper.setFieldSetMapper(new CustomerFieldSetMapper());
customerLineMapper.afterPropertiesSet();
reader.setLineMapper(customerLineMapper);
return reader;
}
Kendi Customer sınıfımızı doldurmak için şöyle yaparızimport org.springframework.batch.item.file.mapping.FieldSetMapper;
import org.springframework.batch.item.file.transform.FieldSet;
import org.springframework.validation.BindException;
public class CustomerFieldSetMapper implements FieldSetMapper<Customer> {
@Override
public Customer mapFieldSet(FieldSet fieldSet) throws BindException {
return Customer.builder()
.id(fieldSet.readLong("id"))
.firstName(fieldSet.readRawString("firstName"))
.lastName(fieldSet.readRawString("lastName"))
.birthdate(fieldSet.readRawString("birthdate"))
.build();
}
}
fieldSetMapper metodu
setLineMapper() ile verilen nesne yerine kullanılabilir
Örnek - Lambda
Şöyle yaparız
// the FileReader takes the path to the file as parameters
@StepScope
@Bean
public FlatFileItemReader<Title> titleCsvReaderString inputFile){
return new FlatFileItemReaderBuilder<Title>()
.name("titles.csv reader")
.resource(new FileSystemResource(inputFile))
.delimited()
.delimiter(",")
.names(new String[]{"id",
"title",
"type",
"description",
"release_year",
"age_certification",
"runtime",
"genres",
"production_countries",
"seasons",
"imdb_id",
"imdb_score",
"imdb_votes",
"tmdb_popularity",
"tmdb_score"
})
.linesToSkip(1)
.fieldSetMapper(fieldSet -> new Title(fieldSet.readString("id"),...))
.beanMapperStrict(false)
.build();
}
linesToSkip metodu
CSV gibi dosyalarda bazen ilk bir kaç satırı atlamak gerekebilir
Örnek
Şöyle yaparız
@Bean(name = "readerNewsReportCSVFile")
public ItemReader<NewsReport> readerNewsReportCSVFile(){
return new FlatFileItemReaderBuilder<NewsReport>()
.name("readerNewsReportCSVFile")
.resource(new FileSystemResource("dataset/FakeNewsNet.csv"))
.linesToSkip(1)
.delimited()
.names("title","news_url","source_domain","tweet_num","real")
.targetType(NewsReport.class)
.build();
}
names metodu
resource metodu
Okunacak dosyayı belirtir
Okunacak dosyayı belirtir
Örnek
Şöyle yaparız
@Bean
public FlatFileItemReader<String> textItemReader() {
return new FlatFileItemReaderBuilder<String>()
.name("textItemReader")
.resource(phishingDatabaseLinksClassPathResource)
.lineMapper(new PassThroughLineMapper())
.build();
Örnek
Şöyle yaparız.
@Bean
public FlatFileItemReader<Voltage> reader() {
return new FlatFileItemReaderBuilder<Voltage>()
.name("voltItemReader")
.resource(new ClassPathResource("Volts.csv"))
.delimited()
.names(new String[]{"volt", "time"})
.lineMapper(lineMapper())
.fieldSetMapper(new BeanWrapperFieldSetMapper<Voltage>() {{
setTargetType(Voltage.class);
}})
.build();
}
Hiç yorum yok:
Yorum Gönder