복붙노트

[SPRING] Spring 배치의 다중 항목 작성기

SPRING

Spring 배치의 다중 항목 작성기

저는 현재 스프링 뭉치를 작성 중입니다. 여기에서 데이터 덩어리를 읽고 처리하며이 데이터를 2 명의 작성자에게 전달하려고합니다. 한 작가는 단순히 데이터베이스를 업데이트하는 반면 두 번째 작가는 csv 파일에 글을 쓸 것입니다.

나 자신의 사용자 정의 작성기를 작성하고 customItemWriter에 두 itemWriter를 삽입하고 customItemWriter의 write 메서드에서 두 항목 작성기의 쓰기 메서드를 호출 할 계획입니다. 이 접근법이 맞습니까? 요구 사항을 충족하는 ItemWriter 구현이 있습니까?

미리 감사드립니다.

해결법

  1. ==============================

    1.Spring의 CompositeItemWriter를 사용하여 모든 작성자에게 위임 할 수 있습니다. 다음은 구성 예입니다.

    Spring의 CompositeItemWriter를 사용하여 모든 작성자에게 위임 할 수 있습니다. 다음은 구성 예입니다.

  2. ==============================

    2.예제처럼 반드시 xml을 사용할 필요는 없습니다. 나머지 코드에서 주석을 사용하는 경우 다음을 수행하면됩니다.

    예제처럼 반드시 xml을 사용할 필요는 없습니다. 나머지 코드에서 주석을 사용하는 경우 다음을 수행하면됩니다.

    public ItemWriter<T> writerOne(){
        ItemWriter<T> writer = new ItemWriter<T>();
        //your logic here
        return writer;
    }
    
    public ItemWriter<T> writerTwo(){
        ItemWriter<T> writer = new ItemWriter<T>();
        //your logic here
        return writer;
    }
    
    public CompositeItemWriter<T> compositeItemWriter(){
        CompositeItemWriter writer = new CompositeItemWriter();
        writer.setDelegates(Arrays.asList(writerOne(),writerTwo()));
        return writer;
    }
    
  3. ==============================

    3.당신이 옳았. SB는 위임을 기반으로하므로 CompositeItemWriter를 사용하는 것이 사용자의 요구에 적합한 선택입니다.

    당신이 옳았. SB는 위임을 기반으로하므로 CompositeItemWriter를 사용하는 것이 사용자의 요구에 적합한 선택입니다.

  4. ==============================

    4.필요에 따라 Writer 클래스를 확장하고 여기에 기능을 추가 할 수도 있습니다. 예를 들어, 나는 HibernateItemWriter를 확장하고 write (List items)를 오버라이드 (override) 할 프로젝트를 가지고있다. 그런 다음 필자가 작성한 객체를 내 sessionFactory와 함께 작성자의 doWrite 메소드에 보냅니다. doWrite (sessionFactory, filteredRecords).

    필요에 따라 Writer 클래스를 확장하고 여기에 기능을 추가 할 수도 있습니다. 예를 들어, 나는 HibernateItemWriter를 확장하고 write (List items)를 오버라이드 (override) 할 프로젝트를 가지고있다. 그런 다음 필자가 작성한 객체를 내 sessionFactory와 함께 작성자의 doWrite 메소드에 보냅니다. doWrite (sessionFactory, filteredRecords).

    그래서 위 예제에서 확장 클래스의 csv 파일에 쓸 수 있었고 HibernateItemWriter는 데이터베이스에 쓸 것입니다. 분명히이 예제에서는 이상적이지 않을 수도 있지만 특정 시나리오에서는 좋은 옵션입니다.

  5. ==============================

    5.Java 구성 방법 SpringBatch4

    Java 구성 방법 SpringBatch4

    @Bean
        public Step step1() {
                return this.stepBuilderFactory.get("step1")
                                        .<String, String>chunk(2)
                                        .reader(itemReader())
                                        .writer(compositeItemWriter())
                                        .stream(fileItemWriter1())
                                        .stream(fileItemWriter2())
                                        .build();
        }
    
        /**
         * In Spring Batch 4, the CompositeItemWriter implements ItemStream so this isn't
         * necessary, but used for an example.
         */
        @Bean
        public CompositeItemWriter compositeItemWriter() {
                List<ItemWriter> writers = new ArrayList<>(2);
                writers.add(fileItemWriter1());
                writers.add(fileItemWriter2());
    
                CompositeItemWriter itemWriter = new CompositeItemWriter();
    
                itemWriter.setDelegates(writers);
    
                return itemWriter;
        }
    
  6. from https://stackoverflow.com/questions/18915688/multiple-itemwriters-in-spring-batch by cc-by-sa and MIT license