2016-10-24 3 views
0

배경 : 우리는 응용 프로그램 MuleSoft를 구축 중이며 요구 사항의 일부로 많은 수의 레코드 (약 30K)를 CSV 파일에 작성해야합니다. 그 전에 DB2의 독립형 데이터 인 XML 형식으로 데이터를 추출해야합니다. 그런 다음 몇 가지 변환/매핑 규칙을 적용한 다음 마지막으로 csv 파일에 데이터를 쓰고 csv 파일을 FTP로 전송합니다. 나는 XML을 첨부하고있다.많은 수의 레코드를 CSV 파일에 쓰기 - 작동하지 않음

문제 :이 프로세스는 약 2500-2600 개의 레코드 만 처리 한 후에 어딘가에 매달려 있습니다. 오류가 발생하지 않습니다. 그냥 거기에 머물러있어 아무 것도하지 않습니다. 우리는 1과 같은 옵션을 시도했습니다. 뮬 배치의 일부로 플로우를 배치합니다. 차이점은 관찰되지 않았습니다. 2. 블로그의 어딘가에서 이것을 발견 했으므로 max error count = -1를 설정하십시오.

누군가 제안 할 수 있다면 정말 도움이 될 것입니다. 파일에 쓰는 동안 레코드 수에 제한이 있습니까?

<?xml version="1.0" encoding="UTF-8"?> 

<mule xmlns:batch="http://www.mulesoft.org/schema/mule/batch" xmlns:db="http://www.mulesoft.org/schema/mule/db" 
    xmlns:file="http://www.mulesoft.org/schema/mule/file" 
    xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" 
    xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd 
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd 
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/batch http://www.mulesoft.org/schema/mule/batch/current/mule-batch.xsd"> 
    <db:generic-config name="Generic_Database_Configuration1" url="jdbc:db2://faadbcdd0017:60004/MATIUT:user=mat_adm;password=q1w2e3r4;" driverClassName="com.ibm.db2.jcc.DB2Driver" doc:name="Generic Database Configuration"/> 
    <file:connector name="File" outputPattern="Carfax.csv" writeToDirectory="C:\opt\CCM\Output\IUT" autoDelete="false" outputAppend="true" streaming="true" validateConnections="true" doc:name="File"/> 
    <file:connector name="File1" outputPattern="sample.txt" readFromDirectory="C:\opt\CCM" autoDelete="true" streaming="true" validateConnections="true" doc:name="File"/> 
    <batch:job name="batch2Batch"> 
     <batch:input> 
      <logger message="Startr&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;" level="INFO" doc:name="Logger"/> 
      <foreach doc:name="For Each"> 
       <db:select config-ref="Generic_Database_Configuration1" doc:name="Database"> 
        <db:parameterized-query><![CDATA[select MSG_ID,TEMPL_ID,MSG_DATA,EMAIL_CHNL_IND,PUSH_CHNL_IND, INSERT_TMSP,UID FROM IUT.message_master WHERE INSERT_TMSP between 
(CURRENT TIMESTAMP- HOUR (CURRENT TIMESTAMP) HOURS- MINUTE(CURRENT TIMESTAMP) MINUTES- SECOND(CURRENT TIMESTAMP) SECONDS 
- MICROSECOND(CURRENT TIMESTAMP) MICROSECONDS) and ((CURRENT TIMESTAMP- HOUR (CURRENT TIMESTAMP) HOURS 
- MINUTE(CURRENT TIMESTAMP) MINUTES- SECOND(CURRENT TIMESTAMP) SECONDS- MICROSECOND(CURRENT TIMESTAMP) MICROSECONDS) + 1 DAY) 
and SOURCE_SYS='CSS' and ONLINE_BATCH_IND IN('Y','E') AND APPL_PROCESS_IND = 'N' with UR]]></db:parameterized-query> 
       </db:select> 
      </foreach> 
      <logger message="#[payload]" level="INFO" doc:name="Logger"/> 
     </batch:input> 
     <batch:process-records> 
      <batch:step name="Batch_Step"> 
       <component class="com.mule.object.transformer.Mapper" doc:name="Java"/> 
       <dw:transform-message metadata:id="9bd2e755-065a-4208-95cf-1277f5643ee9" doc:name="Transform Message"> 
        <dw:input-payload mimeType="application/java"/> 
        <dw:set-payload><![CDATA[%dw 1.0 
%output application/csv separator = "|" , header = false , ignoreEmptyLine = true 
--- 
[{ 
    Timestamp: payload.timeStamp, 
    NotificationType: payload.notificationType, 
    UID: payload.UID, 
    Name: payload.messageData.firstName, 
    MiddleName: payload.messageData.middleName, 
    LastName: payload.messageData.lastName, 
    Email: payload.messageData.email, 
    HHNumber: payload.messageData.cssDataRequest.householdNumber, 
    PolicyNumber: payload.messageData.cssDataRequest.policyContractNumber, 
    SentDate: payload.messageData.cssDataRequest.sendDate, 
    PinNumber: payload.messageData.cssDataRequest.pin, 
    AOR: payload.messageData.cssDataRequest.agentOfRecord 

}]]]></dw:set-payload> 
       </dw:transform-message> 
       <file:outbound-endpoint path="C:\opt\CCM\Output\IUT" connector-ref="File" responseTimeout="10000" doc:name="File"/> 
      </batch:step> 
     </batch:process-records> 
     <batch:on-complete> 
      <logger message="Batch2 Completed" level="INFO" doc:name="Logger"/> 
     </batch:on-complete> 
    </batch:job> 


</mule> 

답변

0

일괄 처리를 사용해보십시오. BatchStep 내부에는 배치 내의 모든 레코드를 누적하는 데 사용할 수있는 BatchCommit을 유지합니다. 그리고 Batch Commit 블록에 대해이 속성을 streaming = "true"로 설정하십시오. 그리고 파일 커넥터는 일괄 처리 커밋 내에 있어야합니다. 이 도움이 되었으면 알려주세요