У меня есть весеннее пакетное задание, которое принимает запрос пользователя, выполняет этот запрос, чтобы найти выбранные элементы, а затем я хочу вставить эти элементы в другую базу данных. Проблема в том, что мне нужно преобразовать элементы, такие как даты, из полученного запроса, чтобы вставить их снова. Как определить тип значений, возвращаемых из запроса?
Это то, что я использую для чтения элементов, которые работают правильно.
@Bean("querySelectiveItems")
@StepScope
public JdbcCursorItemReader querySelectiveItems(@Qualifier("selectiveSourceDatabase") DataSource dataSource,
@Value("#{jobExecutionContext[" + EtlConfiguration.JOB_PARM_MIGRATION_CONFIG + "]}") MigrationDefinition migrationDefinition
) {
JdbcCursorItemReader reader = new JdbcCursorItemReader<>();
reader.setSql(migrationDefinition.getMigrations().getTable().getQuery());
reader.setDataSource(dataSource);
reader.setRowMapper(new ColumnMapRowMapper());
log.info("Queried for items");
return reader;
}
Ниже написано, что я написал, чтобы написать в базу данных назначения. Проблема в том, что значения, которые я должен вставить, неизвестны, потому что они являются результатом пользовательского запроса. Например, если в моем операторе вставки есть тип данных, я должен иметь TO_DATE около значения даты. Есть ли способ сделать это?
@Component
@Lazy
class InsertSelectedItems implements ItemWriter<Map<String, Object>> {
private MigrationDefinition migrationDefinition;
private JdbcTemplate destinationTemplate;
public void setDestinationTemplate(JdbcTemplate destinationTemplate) {
this.destinationTemplate = destinationTemplate;
}
public void setMigrationDefinition(MigrationDefinition migrationDefinition) {
this.migrationDefinition = migrationDefinition;
}
@Override
public void write(List<? extends Map<String, Object>> items) throws Exception {
ArrayList<String> columns = new ArrayList<>();
ArrayList<String> values = new ArrayList<>();
System.out.println(items);
for (Map<String, Object> map : items) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
columns.add(entry.getKey());
values.add(String.valueOf(entry.getValue()));
}
}
String sql = String.format("%s ( %s ) VALUES ( %s ) ",
migrationDefinition.getMigrations().getTable().getInsert(),
String.join(",", columns),
String.join(",", values));
log.info(sql);
destinationTemplate.update(sql);
}
}