Mule Studio 3.4.0 Community Edition을 사용하고 있습니다. File Endpoint로 들어오는 큰 CSV 파일을 구문 분석하는 방법에 대해 큰 문제가 있습니다. 시나리오는 3 개의 CSV 파일이 있고 데이터베이스에 files'content를 넣을 것입니다. 그러나 거대한 파일 (약 144MB)을로드하려고하면 "OutOfMemory"예외가 발생합니다. 나는 큰 CSV를 더 작은 크기의 CSV로 나누거나 분할하는 해결책으로 생각했다. (나는이 솔루션이 최고인지는 모르겠다.) 예외를 던지지 않고 CSV를 처리하는 방법을 찾으려고 노력했다.Mule에서 거대한 CSV 파일을 읽는 법
<file:connector name="File" autoDelete="true" streaming="true" validateConnections="true" doc:name="File"/>
<flow name="CsvToFile" doc:name="CsvToFile">
<file:inbound-endpoint path="src/main/resources/inbox" moveToDirectory="src/main/resources/processed" responseTimeout="10000" doc:name="CSV" connector-ref="File">
<file:filename-wildcard-filter pattern="*.csv" caseSensitive="true"/>
</file:inbound-endpoint>
<component class="it.aizoon.grpBuyer.AddMessageProperty" doc:name="Add Message Property"/>
<choice doc:name="Choice">
<when expression="INVOCATION:nome_file=azienda" evaluator="header">
<jdbc-ee:csv-to-maps-transformer delimiter="," mappingFile="src/main/resources/companies-csv-format.xml" ignoreFirstRecord="true" doc:name="CSV2Azienda"/>
<jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="InsertAziende" queryTimeout="-1" connector-ref="jdbcConnector" doc:name="Database Azienda">
<jdbc-ee:query key="InsertAziende" value="INSERT INTO aw006_azienda VALUES (#[map-payload:AW006_ID], #[map-payload:AW006_ID_CLIENTE], #[map-payload:AW006_RAGIONE_SOCIALE])"/>
</jdbc-ee:outbound-endpoint>
</when>
<when expression="INVOCATION:nome_file=servizi" evaluator="header">
<jdbc-ee:csv-to-maps-transformer delimiter="," mappingFile="src/main/resources/services-csv-format.xml" ignoreFirstRecord="true" doc:name="CSV2Servizi"/>
<jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="InsertServizi" queryTimeout="-1" connector-ref="jdbcConnector" doc:name="Database Servizi">
<jdbc-ee:query key="InsertServizi" value="INSERT INTO ctrl_aemd_unb_servizi VALUES (#[map-payload:CTRL_ID_TIPO_OPERAZIONE], #[map-payload:CTRL_DESCRIZIONE], #[map-payload:CTRL_COD_SERVIZIO])"/>
</jdbc-ee:outbound-endpoint>
</when>
<when expression="INVOCATION:nome_file=richiesta" evaluator="header">
<jdbc-ee:csv-to-maps-transformer delimiter="," mappingFile="src/main/resources/requests-csv-format.xml" ignoreFirstRecord="true" doc:name="CSV2Richiesta"/>
<jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="InsertRichieste" queryTimeout="-1" connector-ref="jdbcConnector" doc:name="Database Richiesta">
<jdbc-ee:query key="InsertRichieste" value="INSERT INTO ctrl_aemd_unb_richiesta VALUES (#[map-payload:CTRL_ID_CONTROLLER], #[map-payload:CTRL_NUM_RICH_VENDITORE], #[map-payload:CTRL_VENDITORE], #[map-payload:CTRL_CANALE_VENDITORE], #[map-payload:CTRL_CODICE_SERVIZIO], #[map-payload:CTRL_STATO_AVANZ_SERVIZIO], #[map-payload:CTRL_DATA_INSERIMENTO])"/>
</jdbc-ee:outbound-endpoint>
</when>
</choice>
</flow>
이 문제를 해결하는 방법을 모르겠다. 미리 도움 주셔서 감사합니다.
SteveS와 Daniel 대단히 감사합니다.이 솔루션을 사용해 보겠습니다. –
안녕하세요, 귀하의 스키마를 사용하려고했는데, 내가 몇 가지 행을 삽입 할 수있는 한 번에, 나는이 메시지가 나타납니다 : –
INFO 2013-05-07 18 : 23 : 18,379 [[splitmultithread] .FileSplitter. C : \ workspace_3.4 \ splitmultithread \ src \ main \ resources \ inbox \ richiesta.csv ERROR 2013-05-07 18:24 : org.mule.transport.file.FileMessageReceiver : 00,144 [[splitmultithread] .storeInDatabase.stage1.04] org.mule.processor.AsyncWorkListener : 작업으로 인해 'workCompleted'에서 예외가 발생했습니다. 실행중인 작업은 다음과 같습니다. org.mule.processo[email protected]3bc752 –