2017-02-05 1 views
0

Привет, я использую весеннюю партию в первый раз. Моим вариантом использования является то, что я должен загружать данные из oracle db в файл csv, используя Spring boot и Spring Data. У меня возникают трудности с настройкой oracle db в ItemReader. Кто-нибудь может мне помочь.Загрузка данных в CSV-файл из базы данных Oracle с использованием Spring Batch, boot и Spring Jpa

Вот мой код

@Configuration 
@EnableBatchProcessing 
public class BatchConfiguration { 

    @Autowired 
    public JobBuilderFactory jobBuilderFactory; 

    @Autowired 
    public StepBuilderFactory stepBuilderFactory; 

    @Autowired 
    public PersonAcctRepository personAcctRepository; 



    @Bean 
    public ItemWriter<CustomerInsr> writer(){ 

     FlatFileItemWriter<CustomerInsr> writer = new FlatFileItemWriter<CustomerInsr>(); 

     String exportFileHeader = "FIRST_NAM, MIDDLE_NAM, LAST_NAM"; 
     StringHeaderWriter headerWriter = new StringHeaderWriter(exportFileHeader); 
     writer.setHeaderCallback(headerWriter); 
     writer.setResource(new ClassPathResource("sample-data.csv")); 

     LineAggregator<CustomerInsr> lineAgg = createCustomerInsrAgg(); 
     writer.setLineAggregator(lineAgg); 



     return writer; 

    } 

    @Bean 
    public LineAggregator<CustomerInsr> createCustomerInsrAgg(){ 

     DelimitedLineAggregator<CaresCustomerInsr> deliAgg = new DelimitedLineAggregator<CustomerInsr>(); 
     deliAgg.setDelimiter(","); 

     FieldExtractor<CustomerInsr> fieldExtractor = createCustomerInsrExtractor(); 
     deliAgg.setFieldExtractor(fieldExtractor); 
     return deliAgg; 

    } 

    @Bean 
    public FieldExtractor<CustomerInsr> createCustomerInsrExtractor(){ 

     BeanWrapperFieldExtractor<CustomerInsr> fieldExtractor = new BeanWrapperFieldExtractor<CustomerInsr>(); 
     fieldExtractor.setNames(new String []{"firstName", "middleName", "lastName"}); 
     return fieldExtractor; 
    } 

    @Bean 
    public ItemReader<CustomerInsr> reader(){ 

     RepositoryItemReader<CustomerInsr> reader = new RepositoryItemReader<CustomerInsr>(); 
     reader.setRepository(personAcctRepository); 
     reader.setMethodName("findAll"); 
     return reader; 
    } 


    @Bean 
    public Job job(){ 

     return jobBuilderFactory.get("job") 
       .incrementer(new RunIdIncrementer()) 
       .flow(step()) 
       .end() 
       .build(); 

    } 


    @Bean 
    public Step step(){ 

     return stepBuilderFactory.get("step") 
       .<CustomerInsr, CustomerInsr> chunk(10) 
       .reader(reader()) 
       .writer(writer()) 
       .build(); 
    } 

} 
+0

Можете ли вы уточнить, что отсутствует/неправильно. трассировки стека? –

+0

Я пытаюсь прочитать данные из oracle db, я использую репозитории данных Spring (репозиторий JPA, используя метод findAll()). Я предоставляю свойства базы данных в файле application.properties. Как мне настроить метод (findAll()) и источник данных в ItemReader –

ответ

0

Ваш случай использования один я сталкиваюсь часто. Настолько часто, что я написал небольшое приложение (весенний ботинок, весенняя партия), чтобы обеспечить продуманную реализацию вашего прецедента.

Вы можете клонировать the repo и добавить свой драйвер oracle вручную. После добавления правильного драйвера вы можете переупаковать приложение в новую банку (если вы используете maven, используйте фазу сборки пакета).

Укажите свои учетные данные и настройки для выгрузки данных в application.yml (это внешний файл конфигурации, аналогичный database.properties).

Я взял на себя смелость предоставить вам пример, который использует CustomerInsr в виде таблицы и ПгвЬЫате, ОТЧЕСТВО и LastName, как колонки, которые вы хотите выгрузить:

spring: 
    datasource: 
    url: jdbc:oracle:thin:@yoururl:yourport:yoursid 
    username: 
    password:   

output-dir: your/directory/target/ 
commit-interval: 10 
page-size: 10 
delimiter: "," 
quote: "\"" 
quote-escape: "\\" 
table-definitions: 
    - file-name: CustomerInsr.csv  
    select-query: "SELECT firstName, middleName, lastName" 
    from-query: "FROM CustomerInsr" 
    sort-column: firstName 

Run баночка из командной строки с чем-то вроде:

java -jar jdbc-unload-1.0.0.jar --spring.config.location=c:\yourlocation\application.yml 

Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать меня.

Смежные вопросы