Я новичок в весенней партии. Я работаю над задачей, где мне нужно перенести данные из sql в nosql с помощью Spring Batch. Как и в SQL, это около 10 тысяч записей. Мне нужно прочитать все таблицы, затем записать во временные DTO, а затем в соответствии с моделированием Mongo, нужно вставить его.
Мои вопросы:
- Поскольку я использую Mongo, который является NoSQL, нужно ли мне заботиться об отношениях SQL при создании запросов в
ItemReader
?? Я подумал о том, что нет необходимости запрашивать в соответствии с отношениями, поскольку мы помещаем данные в NOSql.
Я написал отдельные запросы для чтения всех таблиц из SQL и помещения их в TreeMap
и передачи каждого ключа в виде запроса и RowMapper
в качестве значений. как,
Мой план состоит в том, чтобы использовать 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"));