问题以书面形式向春季批工作

时间:2019-05-02 06:36:28

标签: spring spring-boot spring-batch spring-batch-admin

我是春季批处理的新手。我正在执行一项任务,需要使用Spring Batch将数据从sql迁移到nosql。与SQL一样,它大约有1万条记录。我需要读取所有表,然后在临时DTO中写入,然后根据Mongo的建模,需要将其插入。

我的问题是:

  1. 当我使用的是NoSQL的Mongo时,在ItemReader中创建查询时需要照顾SQL关系吗?我想到了不需要按关系进行查询,最终可以将数据放入NOSql中。
  2. 我编写了一个单独的查询,以从SQL读取所有表并将其放入TreeMap中,并将每个键作为查询传递,并将RowMapper作为值传递。喜欢,

  3. 我的计划是使用BeanPropertyRowMapper而不是默认的Rowmapper,然后一旦我读取SQL表,然后使用BeanPropertyRowMapper直接写入临时DTO。读取所有表并设置到单独的临时DTO中

我想写一个通用的RowMapper,它可以接受所有值,并使用BeanPropertyRowMapper将其写入相应的临时DTO。

请帮助我如何实现这一目标。

谢谢!

public class QueryConstant {

public static final TreeMap<String, Object> queryDtoMap = new TreeMap<String, Object>();
static {
    queryDtoMap.put("SQL_REGION", new RegionRowMapper());
    queryDtoMap.put("SQL_COMPANY", new CompanyRowMapper());

}

public static final String SQL_REGION = "select reg.regn_cd, reg.regn_desc, reg.crte_user_id,reg.crte_ts, reg.lst_updt_user_id,reg.lst_updt_ts,reg. rplct_updt_ts\r\n"
        + "\r\n" + "from schm._regn reg";

public static final String SQL_COUNTRY = " select cntry.cntry_cd,cntry.cntry_nam,cntry.crte_ts,cntry.crte_user_id,cntry.lst_updt_user_id,cntry.rplct_updt_ts,\r\n"
        + "from schm.cntry cntry";

然后使用ItemReader如下读取它:

protected static final TreeMap<String, Object> collectionMap = new TreeMap<>();

@Bean("readerDataJob")
@Primary
public Job readDataJob() throws Exception {
    return jobBuilderFactory.get("readDataJob")
            .incrementer(new RunIdIncrementer())
            .start(dataReaderJobStepOne())
            .build();
}

@Bean
public Step dataReaderJobStepOne() throws Exception {
    return (stepBuilderFactory.get("dataReaderJobStepOne")
            .chunk(Integer.parseInt(chunkSize))
            .reader(dataReader())
            .writer(dataWritter())
            .build());
}
@Bean
@StepScope
public JdbcCursorItemReader<?> dataReader() throws Exception {
    JdbcCursorItemReader<?> reader = null;
    if(!collectionMap.isEmpty()) {
        collectionMap.clear();
    }
    for (String key : queryDtoMap.keySet()) {
        reader = new JdbcCursorItemReader<>();
        reader.setDataSource(this.dataSource);
        reader.setSql(getQuery(key));
        reader.setRowMapper((RowMapper) queryDtoMap.get(key));
        reader.afterPropertiesSet();
        collectionMap.put(key, reader);
    }
    System.out.println("collectionMap>>"+collectionMap);
    return reader;
}
  @Bean
public DataWritter dataWritter() {
    return new DataWritter();
}

public class RegionRowMapper implements RowMapper<Object> {

@Override
public RegionDTO mapRow(ResultSet rs, int row) throws SQLException {

    //GeneralDTO generalDTO = new GeneralDTO();
    RegionDTO regionDTO = new RegionDTO();

    //System.out.println("Result Set Print "+rs.toString());

    regionDTO.setRegn_cd(rs.getString("regn_cd"));
    regionDTO.setRegn_desc(rs.getString("regn_desc"));
    regionDTO.setCrte_user_id(rs.getString("crte_user_id"));

0 个答案:

没有答案