목차

Job Writer 설정

설명

배치 수행시 사용되는 출력 데이터를 등록하여 사용할 수 있는 관리 환경을 제공한다.

사용법

Job Writer 구성

  1. 메뉴 표시줄에서 Window > Preferences를 선택한다.


  2. Preferences 페이지의 우측 목록에서 eGovFrame > Batch > Job Reader/Writer를 선택하고 Job Writer 탭을 선택 후 New 버튼을 클릭한다.


  3. 등록하기 위한 Job Writer 이름을 지정하고 해당 Resource Type과 WriterType 선택후 확인버튼을 클릭하여 Job Writer 를 추가한다.
    ✔ Job Writer 등록시 중복되는 Name은 등록할 수 없다.


제공하는 Job Writer별 설명

DelimitedFlatFileItemWriter

<bean id="TestJob.TestStep1.DelimitedFlatFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
        <property name="resource" value="file:./target/test_output/output.csv" />
        <property name="lineAggregator">
            <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
                <property name="fieldExtractor">
                    <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                        <property name="names" value="name,credit" />
                    </bean>
                </property>
                <property name="delimiter" value="," />
            </bean>
        </property>
    </bean>

FormatterFlatFileItemWriter

    <bean id="TestJob.TestStep.FormatterFlatFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
        <property name="resource" value="file:./target/test_output/output.txt" />
        <property name="lineAggregator">
            <bean class="org.springframework.batch.item.file.transform.FormatterLineAggregator">
                <property name="fieldExtractor">
                    <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                        <property name="names" value="name,credit" />
                    </bean>
                </property>
                <property name="format" value="%-9s%-6s" />
            </bean>
        </property>
    </bean>

EgovDelimitedFlatFileItemWriter

<bean id="TestJob.TestStep.EgovDelimitedFlatFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
        <property name="resource" value="file:./target/test_output/output.csv" />
        <property name="lineAggregator">
            <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
                <property name="fieldExtractor">
                    <bean class="egovframework.brte.core.item.file.transform.EgovFieldExtractor">
                        <property name="names" value="name,credit" />
                    </bean>
                </property>
                <property name="delimiter" value="," />
            </bean>
        </property>
    </bean>

EgovFixedFlatFileItemWriter

    <bean id="TestJob.TestStep.EgovFixedFlatFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
        <property name="resource" value="file:./target/test_output/output.txt" />
        <property name="lineAggregator">
            <bean class="egovframework.brte.core.item.file.transform.EgovFixedLengthLineAggregator">
                <property name="fieldExtractor">
                    <bean class="egovframework.brte.core.item.file.transform.EgovFieldExtractor">
                        <property name="names" value="name,credit" />
                    </bean>
                </property>
                <property name="fieldRanges" value="9,6" />
            </bean>
        </property>
    </bean>

DelimitedMultiResourceItemWriter

 <bean id="TestJob.TestStep.delegateWriter" class="org.springframework.batch.item.file.MultiResourceItemWriter" scope="step">
        <property name="resource" value="file:./target/test_output/*.csv" />
        <property name="itemCountLimitPerResource" value="10" />
        <property name="delegate" ref="TestJob.TestStep.delegateWriter" />
 </bean>
 <bean id="TestJob.TestStep.delegateWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
        <property name="lineAggregator">
            <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
                <property name="fieldExtractor">
                    <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                        <property name="names" value="name, credit" />
                    </bean>
                </property>
                <property name="delimiter" value="," />
            </bean>
        </property>
    </bean>

FormatterMultiResourceItemWriter

 <bean id="TestJob.TestStep.delegateWriter" class="org.springframework.batch.item.file.MultiResourceItemWriter" scope="step">
        <property name="resource" value="file:./target/test_output/output.txt" />
        <property name="itemCountLimitPerResource" value="10" />
        <property name="delegate" ref="TestJob.TestStep.delegateWriter" />
 </bean>
 <bean id="TestJob.TestStep.delegateWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
     <property name="lineAggregator">
            <bean class="org.springframework.batch.item.file.transform.FormatterLineAggregator">
                <property name="fieldExtractor">
                    <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                        <property name="names" value="name,credit" />
                    </bean>
                </property>
                <property name="format" value="%-9s%-6s" />
            </bean>
        </property>
    </bean>

EgovDelimitedMultiResourceItemWriter

 <bean id="TestJob.TestStep.EgovDelimitedMultiResourceItemWriter" class="org.springframework.batch.item.file.MultiResourceItemReader" scope="step">
        <property name="resource" value="file:./target/test_output/output.csv" />
        <property name="itemCountLimitPerResource" value="10" />
        <property name="delegate" ref="TestJob.TestStep.delegateWriter" />
 </bean>
 <bean id="TestJob.TestStep.delegateWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
        <property name="lineAggregator">
            <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
                <property name="fieldExtractor">
                    <bean class="egovframework.brte.core.item.file.transform.EgovFieldExtractor">
                        <property name="names" value="name,credit" />
                    </bean>
                </property>
                <property name="delimiter" value="," />
            </bean>
        </property>
   </bean>

EgovFixedMultiResourceItemWriter

<bean id="TestJob.TestStep.EgovFixedMultiResourceItemWriter" class="org.springframework.batch.item.file.MultiResourceItemReader" scope="step">
        <property name="resource" value="file:./target/test_output/output.txt" />
        <property name="itemCountLimitPerResource" value="10" />
        <property name="delegate" ref="TestJob.TestStep.delegateWriter" />
</bean>
<bean id="TestJob.TestStep.delegateWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
        <property name="lineAggregator">
            <bean class="egovframework.brte.core.item.file.transform.EgovFixedLengthLineAggregator">
                <property name="fieldExtractor">
                    <bean class="egovframework.brte.core.item.file.transform.EgovFieldExtractor">
                        <property name="names" value="name,credit" />
                    </bean>
                </property>
                <property name="fieldRanges" value="9,6" />
            </bean>
        </property>
</bean>

CustomizeFileWriter

IbatisBatchItemWriter

<bean id="IbatisBatchItemWriter" class="org.springframework.batch.item.database.IbatisBatchItemWriter">
	<property name="statementId" value="updateCredit" />
        <property name="sqlMapClient">
            <bean class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
                <property name="dataSource" ref="dataSource" />
                <property name="configLocation" value="file:./src/main/resources/egovframework/sqlmap/brte/sql-map-config.xml" />
            </bean>
        </property>
</bean>

SqlParameterJdbcBatchItemWriter

<bean id="SqlParameterJdbcBatchItemWriter " class="org.springframework.batch.item.database.JdbcBatchItemWriter">
	<property name="assertUpdates" value="true" />
	<property name="itemSqlParameterSourceProvider">
		<bean class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
	</property>
	<property name="sql" value="UPDATE CUSTOMER set credit = :credit where id = :id" />
	<property name="dataSource" ref="dataSource" />
</bean>

ItemPreparedStatementJdbcBatchItemWriter

<bean id="ItemPreparedStatementJdbcBatchItemWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
        <property name="itemPreparedStatementSetter">
            <bean class="클래스찾기로 찾은 사용자 지정 세터" />
        </property>
        <property name="sql" value="INSERT INTO customer (name, credit) VALUES (?,?)" />
        <property name="dataSource" ref="dataSource" />
</bean>

✔ItemPreparedStatementSetter로 지정 된 클래스는 spring의 ItemPreparedStatementSetter나 EgovItemPreparedStatementSetter클래스를 상속받아야 한다.

EgovItemPreparedStatementJdbcBatchItemWriter

<bean id="EgovItemPreparedStatementJdbcBatchItemWriter" class="egovframework.brte.core.item.database.EgovJdbcBatchItemWriter">
        <property name="itemPreparedStatementSetter">
            <bean class="egovframework.brte.core.item.database.support.EgovMethodMapItemPreparedStatementSetter" />
        </property>
        <property name="sql" value="INSERT INTO customer (name, credit) VALUES(?,?)" />
        <property name="params" value="name,credit" />
        <property name="dataSource" ref="dataSource" />
</bean>

EgovCustomizedJdbcBatchItemWriter

<bean id="EgovCustomizedJdbcBatchItemWriter" class="org.springframework.batch.item.database.EgovJdbcBatchItemWriter">
        <property name="itemPreparedStatementSetter">
            <bean class="클래스찾기로 찾은 사용자 지정 세터" />
        </property>
        <property name="sql" value="INSERT INTO customer (name, credit) VALUES (?,?)" />
        <property name="dataSource" ref="dataSource" />
</bean>

✔itemPreparedStatementSetter로 지정 된 클래스는 전자정부 표준프레임워크의 EgovItemPreparedStatementSetter 클래스를 상속받아야 한다.

CustomizeDBWriter

각 마법사내 입력 항목에 대한 설명

구분 항목명 설명
FileResource출력 대상이 되는 File의 경로와 File명 설정
FileField Name구분자, 고정길이 등에 의해 구분되어 Mapping 된 VO의 Field 이름
FileDelimiter구분자 방식으로 쓰기 위한 구분자 값 설정
FileField Format쓰여질 아이템의 포맷
FileField Range쓰여질 아이템 길이
FileMax Count per Resource한개의 파일에 들어갈 수 있는 아이템 최대 라인수
DBiBatis Statement사용자가 정의 해놓은 iBatis 설정 파일에서 사용할 쿼리 ID
DBConfiguration FileSqlMapCofig 설정 파일 경로 및 파일명 설정
DBDatasource Bean ID DB연결을 위해 사용할 데이터소스의 빈ID
DBSqlDB에 아이템을 쓰기위한 쿼리문
DBParams쿼리의 '?' 부분에 들어갈 파라메터 이름
DBRow SetterPreparedStatement에 셋팅시키는 아이템을 셋팅시키는 Setter 클래스

배치 작업 파일 생성시 Job Writer 적용

  1. Batch Job Wizard에서 새로운 배치 작업 파일 생성시 Step Add의 Writer 항목 우측 Add 버튼을 클릭한다.
    ✔ Writer를 등록하기 이전이기 때문에 마법사에 Writer를 등록시켜야 한다는 메시지가 마법사 상단에 출력됩니다.


  2. 기 설정된 Job Writer 항목 중 등록할 항목을 선택하고 OK 버튼을 클릭하여 Writer를 추가한다.


참고사항

구분 항목명 설명 항목의 하위 구성 요소
File DelimitedFlatFileItemWriter 스프링에서 제공하는 Aggregator 와 Extractor를 사용하여 데이터를 구분자로 구분하여 파일에 쓰는 라이터 org.springframework.batch.item.file.FlatFileItemWriter,
org.springframework.batch.item.file.transform.DelimitedLineAggregator,
org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor
File FormatterFlatFileItemWriter 스프링에서 제공하는 Aggregator 와 Extractor를 사용하여 데이터를 정의된 포맷형식으로 파일에 쓰는 라이터 org.springframework.batch.item.file.FlatFileItemWriter,
org.springframework.batch.item.file.transform.FormatterLineAggregator,
org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor
File EgovDelimitedFlatFileItemWriter 스프링에서 제공하는 Aggregator 와 전자정부 표준프레임워크에서 제공하는 Extractor를 사용하여 데이터를 구분자로 구분하여 파일에 쓰는 라이터 org.springframework.batch.item.file.FlatFileItemWriter,
org.springframework.batch.item.file.transform.DelimitedLineAggregator,
egovframework.brte.core.item.file.transform.EgovFieldExtractor
File EgovFixedFlatFileItemWriter 전자정부 표준프레임워크 제공하는 Aggregator 와 Extractor를 사용하여 데이터를 정의된 고정길이로 잘라 파일에 쓰는 라이터 org.springframework.batch.item.file.FlatFileItemWriter,
egovframework.brte.core.item.file.transform.EgovFixedLengthLineAggregator,
egovframework.brte.core.item.file.transform.EgovFieldExtractor
File DelimitedMultiResourceItemWriter 스프링에서 제공하는 Aggregator 와 Extractor를 사용하여 데이터를 구분자로 구분하여 파일에 쓰는 라이터이며, 한 파일에 정의된 수만큼 데이터를 씀 (한 개 이상의 파일이 생성됨) org.springframework.batch.item.file.MultiResourceItemReader,
org.springframework.batch.item.file.transform.DelimitedLineAggregator,
org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor
File FormatterMultiResourceItemWriter 스프링에서 제공하는 Aggregator 와 Extractor를 사용하여 데이터를 정의된 포맷형식으로 파일에 쓰는 라이터이며, 한 파일에 정의된 수만큼 데이터를 씀 (한 개 이상의 파일이 생성됨) org.springframework.batch.item.file.MultiResourceItemReader,
org.springframework.batch.item.file.transform.FormatterLineAggregator,
org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor
File EgovDelimitedMultiResourceItemWriter 스프링에서 제공하는 Aggregator 와 전자정부 표준프레임워크에서 제공하는 Extractor를 사용하여 데이터를 구분자로 구분하여 파일에 쓰는 라이터이며, 한 파일에 정의된 수만큼 데이터를 씀 (한 개 이상의 파일이 생성됨) org.springframework.batch.item.file.MultiResourceItemReader,
org.springframework.batch.item.file.transform.DelimitedLineAggregator,
egovframework.brte.core.item.file.transform.EgovFieldExtractor
File EgovFixedMultiResourceItemWriter 전자정부 표준프레임워크 제공하는 Aggregator 와 Extractor를 사용하여 데이터를 정의된 고정길이로 잘라 파일에 쓰는 라이터이며, 한 파일에 정의된 수만큼 데이터를 씀 (한 개 이상의 파일이 생성됨) org.springframework.batch.item.file.MultiResourceItemReader,
egovframework.brte.core.item.file.transform.EgovFixedLengthLineAggregator,
egovframework.brte.core.item.file.transform.EgovFieldExtractor
File CustomizeFileWriter 사용자가 등록한 파일 라이터 사용자 정의
DB IbatisBatchItemWriter 스프링에서 제공하는 SqlMapClient를 사용하여 데이터를 Ibatis방식으로 DB에 쓰는 라이터 org.springframework.batch.item.database.IbatisBatchItemWriter,
org.springframework.orm.ibatis.SqlMapClientFactoryBean
DB SqlParameterJdbcBatchItemWriter 스프링에서 제공하는 SqlProvider를 사용하여 데이터를 Jdbc방식으로 DB에 쓰는 라이터 org.springframework.batch.item.database.JdbcBatchItemWriter,
org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider
DB ItemPreparedStatementJdbcBatchItemWriter 스프링에서 제공하는 Setter 를 사용하여 데이터를 Jdbc방식으로 DB에 쓰는 라이터 org.springframework.batch.item.database.JdbcBatchItemWriter,
org.springframework.batch.item.database.ItemPreparedStatementSetter
DB EgovItemPreparedStatementJdbcBatchItemWriter 전자정부 표준프레임워크에서 제공하는 Setter 를 사용하여 데이터를 Jdbc방식으로 DB에 쓰는 라이터 egovframework.brte.core.item.database.EgovJdbcBatchItemWriter,
egovframework.brte.core.item.database.EgovItemPreparedStatementSetter
DB EgovCustomizedJdbcBatchItemWriter 전자정부 표준프레임워크의 Setter를 상속받아 재정의한 Setter를 사용하여 데이터를 Jdbc방식으로 DB에 쓰는 라이터 egovframework.brte.core.item.database.EgovJdbcBatchItemWriter,
EgovItemPreparedStatementSetter나 ItemPreparedStatementSetter 를 상속받아 작성한 클래스
DB CustomizeDBWriter 사용자가 등록한 DB 라이터 사용자 정의