시스템에서 CSV 파일을 가져 와서 포함 된 데이터를 데이터베이스에 삽입해야하는 플로에 대해 작업하고 있습니다. 파일에있는 일부 레코드의 형식이 잘못되었습니다 (예 : 잘못된 열 수). 따라서 분석을 위해 다른 텍스트 형식의 파일에 기록해야합니다.CSV 파일에서 올바른 레코드를 필터링하여 Anypoint Studio를 사용하여 필요한 작업을 수행하려면
모든 좋은 레코드를 데이터베이스에 삽입하는 흐름을 만들었지 만 나쁜 레코드를 파일에 입력하지 않습니다. 나는 현재 초보자이므로 어떻게 진행해야할지 모르겠습니다.
XML 코드 :
<flow name="fileFlow">
<file:inbound-endpoint path="src/main/resources/Input" moveToPattern="#[message.inboundProperties.originalFilename].zip" moveToDirectory="src/main/resources/Output" responseTimeout="10000" metadata:id="b85f6b05-1679-4b60-8bbe-30e6d2c68df7" doc:name="File">
<file:filename-regex-filter pattern=".*csv" caseSensitive="true"/>
</file:inbound-endpoint>
<file:file-to-string-transformer doc:name="File to String"/>
<set-payload value="#[payload.replaceAll(",,", ", ,")]" doc:name="Set Payload"/>
<splitter expression="#[rows=StringUtils.split(message.payload,'\r\n');ArrayUtils.subarray(rows,1,rows.size())]" doc:name="Splitter"/>
<flow-ref name="fileFlow1" doc:name="fileFlow1"/>
<catch-exception-strategy doc:name="Insert the bad record into a file">
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<set-session-variable variableName="var" value="#[payload+'var']" doc:name="Session Variable"/>
<file:outbound-endpoint path="src/main/resources/Output" outputPattern="BadRecords.txt" responseTimeout="10000" doc:name="File"/>
<flow-ref name="fileFlow1" doc:name="fileFlow1"/>
</catch-exception-strategy>
</flow>
<flow name="fileFlow1">
<expression-transformer expression="#[StringUtils.split(message.payload,',')]" doc:name="Expression"/>
<db:insert config-ref="MySQL_Configuration" doc:name="Database">
<db:parameterized-query><![CDATA[insert into GoodRecords values(#[message.payload[0]], #[message.payload[1]], #[message.payload[2]], #[message.payload[3]], #[message.payload[4]], #[message.payload[5]], #[message.payload[6]], #[message.payload[7]], #[message.payload[8]], #[message.payload[9]], #[message.payload[10]], #[message.payload[11]], #[message.payload[12]], #[message.payload[13]], #[message.payload[14]], #[message.payload[15]], #[message.payload[16]], #[message.payload[17]], #[message.payload[18]], #[message.payload[19]], #[message.payload[20]])]]></db:parameterized-query>
</db:insert>
<logger message="#[payload] " level="INFO" doc:name="Logger"/>
</flow>
흐름 구조 :
개인적으로 생각 제작 한 흐름은 매우 비효율적이고 잘못된 것입니다.파일에 잘못된 레코드를 입력하려면 어떻게합니까 (지정된 흐름이 맞으면)? 특정 유스 케이스에 대해 벌크 모드을 사용하고 싶었습니다 (작업 할 약 1000 개의 이상한 레코드가 있기 때문에)하지만 어떻게 진행할 지 잘 모릅니다.