복붙노트

[SPRING] 봄 배치 및 봄 통합

SPRING

봄 배치 및 봄 통합

Spring Batch와 Spring Integration을 사용하여 데이터베이스에서 데이터를 가져 와서 파일에 쓰고 원격 서버로 ftp하고 싶습니다.

하지만 내 문제는 내 테이블에 대한 도메인 개체를 만들고 싶지 않다는 것입니다. 내 쿼리는 무작위이며 데이터를 읽고 파일에 쓰고 전송하는 무언가가 필요합니다.

각각의 도메인 객체를 생성하지 않고 Spring Batch와 Integration을 사용할 수 있습니까?

해결법

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

    1.전혀. JDBC ItemReader 또는 JPA ItemReader 중 하나를 ColumnMapRowMapper와 함께 사용하여 결과 집합의 맵을 검색 할 수 있습니다. FlatFileItemWriter를 사용하여 원하는 형식으로 데이터를 출력 할 수 있습니다 (제공되는 클래스로 매우 쉽게 구분되며, 고정 너비는지도를 고정 폭 문자열로 변환하기 위해 하나의 클래스를 작성하는 것을 의미합니다).

    전혀. JDBC ItemReader 또는 JPA ItemReader 중 하나를 ColumnMapRowMapper와 함께 사용하여 결과 집합의 맵을 검색 할 수 있습니다. FlatFileItemWriter를 사용하여 원하는 형식으로 데이터를 출력 할 수 있습니다 (제공되는 클래스로 매우 쉽게 구분되며, 고정 너비는지도를 고정 폭 문자열로 변환하기 위해 하나의 클래스를 작성하는 것을 의미합니다).

    저는 스프링 배치 (Spring Batch)를 사용하여 이것을 꽤 자주 처리합니다.

    리소스, 데이터 소스를 정의하고 SQL을 제공하는 것 외에,이 (테스트되지 않은) 구성은 여러분이 묻는 바를 정확히 수행합니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <beans:beans xmlns="http://www.springframework.org/schema/batch"
        xmlns:beans="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
            http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.0.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
    
        <job-repository id="jobRepository"
            data-source="jobDataSource"/>
    
        <beans:bean id="transactionManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
            p:dataSource-ref="jobDataSource" />
    
        <beans:bean id="extractReader" scope="step"
            class="org.springframework.batch.item.database.JdbcCursorItemReader">
            <beans:property name="dataSource" ref="appDataSource" />
            <beans:property name="rowMapper">
                <beans:bean
                    class="org.springframework.jdbc.core.ColumnMapRowMapper" />
            </beans:property>
            <beans:property name="sql">
                <beans:value>
                    . . .
                </beans:value>
            </beans:property>
        </beans:bean>
        <beans:bean id="extractWriter"
            class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
            <beans:property name="resource" ref="fileResource" />
            <beans:property name="lineAggregator">
                <beans:bean
                    class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
                    <beans:property name="delimiter">
                        <util:constant
                            static-field="org.springframework.batch.item.file.transform.DelimitedLineTokenizer.DELIMITER_TAB" />
                    </beans:property>
                    <beans:property name="fieldExtractor">
                        <beans:bean
                            class="org.springframework.batch.item.file.transform.PassThroughFieldExtractor" />
                    </beans:property>
                </beans:bean>
            </beans:property>
        </beans:bean>
    
        <job id="extractJob" restartable="true">
            <step id="extractStep" >
                <tasklet>
                    <chunk reader="extractReader" writer="extractWriter"
                        commit-interval="100" />
                </tasklet>
            </step>
        </job>
    
    </beans:beans>
    
  2. ==============================

    2.Spring Batch와의 현재 경험으로. 데이터베이스 호출을 JdbcTemplate 또는 이전 방법을 사용하여 처리하려는 경우 동일한 POJO를 다른 응용 프로그램 계층에서 다시 사용할 수 있습니다. 그러나 JAXB, JIXB 등 XML과 Hinernate, MyBatis 등을 사용하여 persiatance를 사용하면 문제가 발생합니다. POJO는 근원적 인 특수한 주석과 API 제약과 조밀하게 결합합니다.

    Spring Batch와의 현재 경험으로. 데이터베이스 호출을 JdbcTemplate 또는 이전 방법을 사용하여 처리하려는 경우 동일한 POJO를 다른 응용 프로그램 계층에서 다시 사용할 수 있습니다. 그러나 JAXB, JIXB 등 XML과 Hinernate, MyBatis 등을 사용하여 persiatance를 사용하면 문제가 발생합니다. POJO는 근원적 인 특수한 주석과 API 제약과 조밀하게 결합합니다.

  3. from https://stackoverflow.com/questions/7931623/spring-batch-and-spring-integration by cc-by-sa and MIT license