I am using Mule Studio 3.4.0 Community Edition. I have a big problem with how to parse a large CSV file entering the endpoint of the file. The scenario is that I have 3 CSV files and I would put the contents of the file into the database. But when I try to download a huge file (about 144 MB), I get an OutOfMemory exception. I decided how to split / split my large CSV into smaller CSVs (I don't know if this is the best solution). Try to find a way to handle CSV without exception.
<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>
Please, I do not know how to solve this problem. Thanks in advance for any help
source share