Mule 使用空日期将 CSV 导入 Mysql

Mule Import CSV into Mysql with NULL date

我正在使用 MULE 将 CSV 文件导入 Mysql 数据库。但是,在导入 CSV 时,如果有一个空字段映射到 Mysql 中的日期字段,导入将失败。

这是 Mysql 字段:

Description     RecDate
---------------------------
Varchar(50)     Date

这是 CSV 文件:

 your basic description,,
 another description,,
 yet another description,,

这是 Mule 配置

 <?xml version="1.0" encoding="UTF-8"?>
 <mule xmlns:jdbc-ee="http://www.mulesoft.org/schema/mule/ee/jdbc"     xmlns:file="http://www.mulesoft.org/schema/mule/file"  xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" 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" version="EE-3.6.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans        
http://www.springframework.org/schema/beans/spring-beans-current.xsd http://www.mulesoft.org/schema/mule/corejttp://www.mulesoft.org/schema/mule/core/current/mule.xsdjttp://www.mulesoft.org/schema/mule/filejttp://www.mulesoft.org/schema/mule/file/current/mule-file.xsdjttp://www.mulesoft.org/schema/mule/ee/trackingjttp://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsdjttp://www.mulesoft.org/schema/mule/ee/jdbc jttp://www.mulesoft.org/schema/mule/ee/jdbc/current/mule-jdbc-ee.xsd">

<configuration doc:name="Configuration">
<expression-language autoResolveVariables="true">
<import class="org.mule.util.StringUtils" />
</expression-language>
</configuration>
<jdbc-ee:mysql-data-source name="MySQL_Data_Source" user="XXX" password="XXX" url="jdbc:mysql://127.0.0.1:3306/XXX" transactionIsolation="UNSPECIFIED" doc:name="MySQL Data Source"/>
<jdbc-ee:connector name="Database" dataSource-ref="MySQL_Data_Source" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database"/>
<flow name="csvFlow1" >
<file:inbound-endpoint path="C:\Users\XXX\Desktop\Mule_Testing" pollingFrequency="5000" doc:name="Source" responseTimeout="10000" tracking:enable-default-events="true"/>
<file:filename-wildcard-filter caseSensitive="false" pattern="CRM_UPDATES.csv"/>
<object-to-string-transformer doc:name="Object to String"/>
<splitter expression="#[StringUtils.split(message.payload, '\n\r')]" doc:name="Splitter"/>
<expression-transformer expression="#[StringUtils.split(message.payload, ',')]" doc:name="Expression"/>
<logger level="DEBUG" doc:name="Logger" message="Payload is: #[message.payload]"/>
<jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="InsertRecord" queryTimeout="-1" connector-ref="Database" doc:name="MyDB">
        <jdbc-ee:query key="InsertRecord" value="INSERT INTO `XXX` (`Description`,`RecDate`) VALUES (#[message.payload[0]],#[message.payload[1]])"/>

</jdbc-ee:outbound-endpoint>
</flow>
</mule>  

每当我将 CSV 文件更改为以下内容时:

  your basic description,0000-00-00,
  another description,0000-00-00,
  yet another description,0000-00-00,

导入将起作用。 如果我将 CSV 日期字段更改为 NULL,导入将失败:

   your basic description,NULL,
   another description,NULL,
   yet another description,NULL,

问题来自:

StringUtils.split(message.payload, ',')

这会生成一个字符串数组。

如果 CSV 是:

your basic description,,

它将使用一个空字符串作为日期字段的值,我认为这不合适。

如果 CSV 是:

your basic description,NULL,

它将使用其中包含 "NULL" 的字符串,这也不是有效日期。

我建议您将 StringUtils.trimToNull 应用于拆分数组的每个元素以获得日期字段的真实 null 值。