Spring 批处理 - FlatFileItemReader \001 分隔符问题
Spring Batch - FlatFileItemReader \001 delimiter issue
我正在开发一个 Spring 批处理应用程序,我正在使用 FlatFileItemReader 读取带有分隔符 ~ 或 | 的文件它工作正常,一旦读取完成就会调用处理器。
但是当我尝试将定界符用作 \001 时,处理器没有被调用并且我在控制台中也没有收到任何错误。(Linux 环境)
示例文件格式:
0002~000000000000000470~000006206210008078~PR~7044656907~7044641561~~~~240082202~~~ENG~CH~~19940926~D~~~AL~~~P~美国
这个是我的reader配置。
<property name="resource" value="#{stepExecutionContext['fileResource']}" />
<!-- <property name="linesToSkip" value="1"></property> -->
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer">
<bean
class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<property name="delimiter" value="${file.delimiter}"/>
<property name="names" value="sor_id,sor_cust_id,acct_id,cust_role_type_cd,cust_full_nm,mailg_adr_line_1,mailg_adr_line_2,mailg_city_nm,mailg_geo_st_cd,mailg_full_pstl_cd,mailg_cntry_cd,mailg_adr_desc,phy_adr_line_1,phy_adr_line_2,phy_city_nm,phy_geo_st_cd,phy_full_pstl_cd,phy_cntry_cd,phy_adr_desc,home_phn_num,work_phn_num,mobile_phn_num,email_adr_txt,ssn,cust_tax_idn_num,gndr_cd,martl_cd,lang_cd,acct_stat_cd,cust_brth_dt,acct_open_dt,sor_acct_stat_cd,sor_acct_stat_desc,vld_phn_num_ind,prod_cd,prft_ctr_cd,bus_legl_strc_cd,acct_use_cd,cntry_of_origin_cd" />
</bean>
</property>
<property name="fieldSetMapper">
<bean class="com.cap1.cdi.batch.SrcMasterFieldSetMapper" />
</property>
</bean>
</property>
</bean>
还有其他人遇到过同样的问题吗?
此致,
香卡
我要回答我自己的问题。
实际问题是控制字符在 linux (^A)
中用作分隔符
在 Java 中,当我使用 string.split("\u0001") 时它正在工作。还将相同的传递给 Spring batch flatfileitemreader 作为分隔符,它就像一个魅力。
谢谢
香卡.
我正在开发一个 Spring 批处理应用程序,我正在使用 FlatFileItemReader 读取带有分隔符 ~ 或 | 的文件它工作正常,一旦读取完成就会调用处理器。
但是当我尝试将定界符用作 \001 时,处理器没有被调用并且我在控制台中也没有收到任何错误。(Linux 环境)
示例文件格式:
0002~000000000000000470~000006206210008078~PR~7044656907~7044641561~~~~240082202~~~ENG~CH~~19940926~D~~~AL~~~P~美国
这个是我的reader配置。
<property name="resource" value="#{stepExecutionContext['fileResource']}" />
<!-- <property name="linesToSkip" value="1"></property> -->
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer">
<bean
class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<property name="delimiter" value="${file.delimiter}"/>
<property name="names" value="sor_id,sor_cust_id,acct_id,cust_role_type_cd,cust_full_nm,mailg_adr_line_1,mailg_adr_line_2,mailg_city_nm,mailg_geo_st_cd,mailg_full_pstl_cd,mailg_cntry_cd,mailg_adr_desc,phy_adr_line_1,phy_adr_line_2,phy_city_nm,phy_geo_st_cd,phy_full_pstl_cd,phy_cntry_cd,phy_adr_desc,home_phn_num,work_phn_num,mobile_phn_num,email_adr_txt,ssn,cust_tax_idn_num,gndr_cd,martl_cd,lang_cd,acct_stat_cd,cust_brth_dt,acct_open_dt,sor_acct_stat_cd,sor_acct_stat_desc,vld_phn_num_ind,prod_cd,prft_ctr_cd,bus_legl_strc_cd,acct_use_cd,cntry_of_origin_cd" />
</bean>
</property>
<property name="fieldSetMapper">
<bean class="com.cap1.cdi.batch.SrcMasterFieldSetMapper" />
</property>
</bean>
</property>
</bean>
还有其他人遇到过同样的问题吗?
此致, 香卡
我要回答我自己的问题。
实际问题是控制字符在 linux (^A)
中用作分隔符在 Java 中,当我使用 string.split("\u0001") 时它正在工作。还将相同的传递给 Spring batch flatfileitemreader 作为分隔符,它就像一个魅力。
谢谢 香卡.