| @Entity@Table(name = "customer")
 public class CustomerCredit {
 public static final String TABLE_NAME = "customer";
 
 @Column(name = "name",nullable = true,length = 12)
 private String name;
 
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 @Column(name = "id",nullable = false)
 private Integer id;
 
 @Column(name = "credit",precision = 15,scale = 2)
 private BigDecimal credit;
 
 FlatFileItemReader 使用默认的DefaultLineMapper,里面指定了lineTokenizer和fieldSetMapper,就是说要怎么读一行行的数据,读了之后怎么和Bean的字段Mapper,这样后面的步骤好继续处理。
 public class CustomerMapper implements FieldSetMapper<CustomerCredit> {@Override
 public CustomerCredit mapFieldSet(FieldSet fieldSet) throws BindException {
 CustomerCredit lv = new CustomerCredit();
 lv.setId(Integer.parseInt(fieldSet.readString(0)));
 lv.setName(fieldSet.readString(1));
 lv.setCredit(fieldSet.readBigDecimal(2));
 return lv;
 }
 }
 
 如果是读数据库呢?就是下面那个JdbcCursorItemReader,里面指定了dataSource,sql,rowMapper,这些都类似文件 public class CustomerCreditRowMapper implements RowMapper {? ? public static final String ID_COLUMN = "id";
 ? ? public static final String NAME_COLUMN = "name";
 ? ? public static final String CREDIT_COLUMN = "credit";
 
 ? ? public Object mapRow(ResultSet rs,int rowNum) throws SQLException {
 ? ? ? ? CustomerCredit customerCredit = new CustomerCredit();
 ? ? ? ? customerCredit.setId(rs.getInt(ID_COLUMN));
 ? ? ? ? customerCredit.setName(rs.getString(NAME_COLUMN));
 ? ? ? ? customerCredit.setCredit(rs.getBigDecimal(CREDIT_COLUMN));
 ? ? ? ? return customerCredit;
 ? ? }
 }
 
 还可以和hibernate结合来读取数据,可以读取存储过程的数据,等等,具体可以参考spring batch文档 说好的自定义处理数据呢,比如我们把每个人的Credit加10. @Component("customProcessor")public class CustomProcessor implements
 ItemProcessor<CustomerCredit,CustomerCredit> {
 @PersistenceContext
 private EntityManager em;
 @Override
 public CustomerCredit process(CustomerCredit item) throws Exception {
 System.out.println(new Date().toString()+"start to process");
 if (item == null) {
 return null;
 }
 try {
 item = em.find(CustomerCredit.class,item.getId());
 item.setCredit(item.getCredit().add(new BigDecimal(10)));
 //find by id才可以persist (否则出现detached entity passed to persist)
 em.persist(item);
 } catch (Exception e) {
 e.printStackTrace();
 }
 return item;
 }
 }
 
 每一步的处理,我们想看看结果,可以定制一个ItemReadListener public class CustomStepListener implements ItemReadListener<CustomerCredit> ? 具体代码省略
 修改module-context.xml (编辑:我爱故事小小网_铜陵站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |