2017-02-05 20 views
0

こんにちは私は春バッチをはじめて使用しています。私の使用例は、SpringブートとSpringデータを使用して、Oracle DBからcsvファイルにデータをロードする必要があるということです。 ItemReaderでoracle dbを設定するのが難しいです。誰かが私を助けることができますか?Springバッチ、ブート、Spring Jpaを使用してOracle DatabaseからCSVファイルにデータをロード

は、ここでご利用の場合は、私が頻繁に発生したものです私のコード

@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ファイルにデータベースプロパティを与えています。 ItemReaderでメソッド(findAll())とデータソースをどのように設定すればよいですか –

答えて

0

です。私はあなたのユースケースの実装を実現するために小さなアプリケーション(春の起動、春のバッチ)を書いていました。

the repoをクローンし、手動でoracleドライバを追加できます。正しいドライバを追加した後、アプリケーションを新しいjarに再パッケージ化することができます(mavenを使用する場合はパッケージ構築フェーズ)。

データベース資格情報と、application.ymlでデータをアンロードするための設定を提供します(これは、database.propertiesと同様の外部構成ファイルです)。

私はあなたがアンロードしたい列としてテーブルとしてCustomerInsrを使用し、firstNameという、middleNameと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 

のようなもので、コマンドラインからjarファイルを実行します。

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

ご質問がある場合はお気軽にお問い合わせください。

関連する問題