- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从文本文件中读取、解析和写入数据。我实现了这一点,但我对标识符的声明有疑问。我在下面展示了我的类(class)。
CustomerDataMapper.java
public class CustomerDataMapper implements FieldSetMapper<Customer> {
private static Log log = LogFactory.getLog(CustomerDataMapper.class);
@Override
public RawData mapFieldSet(FieldSet fieldSet) throws BindException {
Customer customer = new Customer();
try {
customer.setCustNum(fieldSet.readInt("id"));
customer.setNameSurname(fieldSet.readString("name"));
}catch (Exception e){
log.error("Mapping error, " + e);
}
return customer;
}
}
Customer.java
@Component
@Scope("prototype")
public class Customer implements Serializable{
private Integer custNum;
private String nameSurname;
public String getCustNum) {
return custNum;
}
public void setCustNum(String custNum) {
this.custNum = custNum;
}
public String getNameSurname() {
return nameSurname;
}
public void setNameSurname(String nameSurname) {
this.nameSurname = nameSurname;
}
}
fileManager.xml
<bean id="customerFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
<property name= "encoding" value ="Cp1254"/>
<property name="resource" value="#{jobParameters['processPath']}"/>
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer">
<bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
<property name="names" value="id, name"/>
<property name="columns" ref="1-9, 10-30"/>
</bean>
</property>
<property name="fieldSetMapper">
<bean class="mapper.CustomerDataMapper ">
<property name="fileName" value="#{jobParameters['fileNameAndTime']}"/>
</bean>
</property>
</bean>
</property>
<bean id="customerFileItemWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
<property name="dataSource" ref="dataSource"/>
<property name="sql">
<value>
<![CDATA[
insert into CUSTOMER(CUST_NUM, NAME_SURNAME)
values (:custNum, :nameSurname)
]]>
</value>
</property>
<property name="itemSqlParameterSourceProvider">
<bean class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider"/>
</property>
<bean id = "customerSkipListener" class="listener.CustomerSkipListener"/>
<batch:job id="customerImportJob">
<batch:step id="smsPasswordDataImportStep">
<batch:tasklet>
<batch:chunk reader="customerFileItemReader" writer="customerFileItemWriter" commit-interval="1" skip-limit="1000">
<batch:skippable-exception-classes>
<batch:include class="java.lang.Exception"/>
<batch:exclude class="java.io.FileNotFoundException"/>
</batch:skippable-exception-classes> <batch:listeners>
<batch:listener ref="customerSkipListener" />
</batch:listeners>
</batch:chunk>
</batch:tasklet>
</batch:step>
我想问一下,我可以将下面这个类用于FieldSetMapper吗?如果我在定义标识符时不使用驼峰命名法,则无法写入数据库。有没有这方面的思路或者方法。非常感谢。
Customer.java
@Component
@Scope("prototype")
public class Customer implements Serializable{
private Integer Cust_Num;
private String Name_Surname;
public String getCust_Num() {
return Cust_Num;
}
public void setCust_Num(String Cust_Num) {
this.Cust_Num = Cust_Num;
}
public String getName_Surname() {
return Name_Surname;
}
public void setName_Surname(String Name_Surname) {
this.Name_Surname = Name_Surname;
}
}
最佳答案
I want to ask this, Can use this class for FieldSetMapper
是的,你可以使用这个类。由于您编写了自定义 FieldSetMapper
,您可以控制映射逻辑。你的映射器会是这样的:
public class CustomerDataMapper implements FieldSetMapper<Customer> {
private static Log log = LogFactory.getLog(CustomerDataMapper.class);
@Override
public RawData mapFieldSet(FieldSet fieldSet) throws BindException {
Customer customer = new Customer();
try {
customer.setCust_Num(fieldSet.readInt("id"));
customer.setName_Surname(fieldSet.readString("name"));
}catch (Exception e){
log.error("Mapping error, " + e);
}
return customer;
}
}
但是您的问题不在阅读方(以及 FieldSetMapper
),而是在作者方。 JdbcBatchItemWriter
使用 ItemSqlParameterSourceProvider
从您的 Customer
中提取数据对象并将它们设置在 sql 查询上。默认情况下,BeanPropertyItemSqlParameterSourceProvider
使用时,此实现根据 JavaBeans 命名约定提取数据。但是,您可以提供自定义实现,在您的情况下,该实现类似于:
class CustomerItemSqlParameterSourceProvider implements ItemSqlParameterSourceProvider<Customer> {
@Override
public SqlParameterSource createSqlParameterSource(Customer customer) {
Map<String, Object> params = new HashMap<>();
params.put("custNum", customer.getCust_Num());
params.put("nameSurname", customer.getName_Surname());
return new MapSqlParameterSource(params);
}
}
然后你设置这个CustomerItemSqlParameterSourceProvider
关于你的作家。
希望这有帮助。
关于java - 使用批处理作业的 FlatFileItemReader 和 FlatFileItemWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54341257/
我从 Spring 开始检查这个项目: https://github.com/spring-guides/gs-batch-processing 来源:https://spring.io/guides
我正在使用 FlatFileItemReader 读取一个 csv 文件,并使用 FieldSetMapper 将其映射到域对象。 如果映射失败,我希望由 FlatFileItemReader 读取原
假设我有一个对象 Engine,唯一的属性是 brandName,然后我有一个 CSV 文件,如下所示: car_brand; bike_brand; airplane_brand; boat_bra
我有一个简单的 csv 文件,约有 400,000 行(仅一列)我花了很多时间来阅读记录并处理它们 处理器根据 couchbase 验证记录 作者 - 写入远程主题我花了大约30分钟。那太疯狂了。 我
我正在使用 Spring Batch 读取 CSV 文件并将行写入屏幕上。我的工作由三部分组成:第 1 部分:验证 CSV 文件是否存在于我的磁盘上的某个 INPUT 目录中,如果返回 TRUE,则该
使用 Spring Batch 我试图将输入文件的每一行作为 String 提供给 ItemProcessor 而 中没有任何“CSV 解析”项目阅读器。 我提出了一个包含以下 reader() 方法
在我的项目中,我使用 Spring 批处理并使用 FlatFileItemReader/FieldSetMapper 读取文件。一些输入文件有问题。几条记录的行被剪切/格式错误。 假设输入文件有 4
在我的 springbatch+quartz 设置中,我正在使用 FlatFileItemReader 读取一个 CSV 文件。我想为读者设置光标以使用给定的读者参数启动下一个作业实例。是否可以?
我正在阅读一个逗号分隔的文件,它有两个字段。该文件有时可能不包含第二个字段,因此发生这种情况时 Spring DelimitedLineTokenizer 不应提示。通过说明以下内容
我的应用程序只需要固定的要读取的记录数 & 处理。如果我使用的是 flatfileItemReader ,如何限制? 在基于数据库的项目阅读器中,当达到 max_limit 时,我将返回空/空列表。
我有两个不同的文件,一个由管道分隔符“|”分隔一个由逗号“,”组成。 我正在使用 Spring Batch 使用 FlatFileItemReader 来处理这些文件。我不想让文件有两个读者和两个
当我在 Spring Batch 中读取 CSV 文件时,当特定列没有实际值时,它会在行中抛出 BindException (typeMismatch)。 如何跳过它们? 最佳答案 我配置了我的 It
我想从文本文件中读取、解析和写入数据。我实现了这一点,但我对标识符的声明有疑问。我在下面展示了我的类(class)。 CustomerDataMapper.java public class Cust
我需要能够访问正在读取的当前行所在的平面文件的名称。我们正在移植一个应用程序,目前的一些流程需要此信息。 这是我当前的配置: private FlatFileItemReader invoiceFla
我目前有一个应用程序,我正在尝试诊断我在设置中所做的错误,但没有运气确定为什么它在非常特定的情况之外无法工作。 首先是我正在使用的代码。 配置.java @EnableBatchProcessing
根据 spring batch docs由于重启问题,他们不建议使用 MuliResourceItemReader,并建议在每个文件夹中使用一个文件。 "It should be noted that
我正在使用 Spring Batch FlatFileItemReader 来解析 csv 文件。我时不时地收到一条格式错误的行,应用程序完全崩溃: Caused by: org.springfram
我正在创建一个作业,该作业将根据输入参数读取和处理不同的 .csv 文件。有 3 种不同类型的 .csv 文件,它们具有不同的 header 。我想使用通用 FlatFileItemReader 将文
我可以在 Spring Batch 中将 FlatfileItemReader 与 Taskexecutor 一起使用吗? 我已经使用 ThreadPoolTaskExecutor 实现了 Fla
我想从文本文件中读取事务,然后使用 JdbcBatchItemWriter 将此事务写入数据库。当我使用 csv 文件和 DelimitedLineTokenizer 时,它工作正常。如果我使用文本文
我是一名优秀的程序员,十分优秀!