Выпуск В письменном виде к весенней партии Работа - PullRequest
0 голосов
/ 02 мая 2019

Я новичок в весенней партии. Я работаю над задачей, где мне нужно перенести данные из sql в nosql с помощью Spring Batch. Как и в SQL, это около 10 тысяч записей. Мне нужно прочитать все таблицы, затем записать во временные DTO, а затем в соответствии с моделированием Mongo, нужно вставить его.

Мои вопросы:

  1. Поскольку я использую Mongo, который является NoSQL, нужно ли мне заботиться об отношениях SQL при создании запросов в ItemReader ?? Я подумал о том, что нет необходимости запрашивать в соответствии с отношениями, поскольку мы помещаем данные в 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"));
...