2015-05-28 3 views
1

У меня есть сценарий, когда мне нужно разбирать плоские файлы и обрабатывать эти записи в вставках базы данных mysql (схема уже существует).Spring Batch: База данных запроса элемента запроса?

Я использую FlatFileItemReader для анализа файлов и JdbcCursorItemWriter для вставки в базу данных.

Я также использую ItemProcessor для преобразования любых значений столбца или пропусков записей, которые я не хочу.

Моя проблема заключается в том, что некоторые из этих вставок должны иметь внешний ключ для другой таблицы, в которой уже есть данные.

Так что я думал сделать выбор, чтобы получить идентификатор и обновить pojo внутри логики ItemProcessor.

Это лучший способ сделать это? Я могу рассмотреть альтернативы, поскольку я только начинаю писать все это.

Спасибо!

ответ

0

ItemProcessor в весенний периодический шаг обычно используется для обогащения данных и запроса db для чего-то подобного.

Для записи другой вариант заключается в использовании вспомогательного выбора в инструкции insert для получения значения внешнего ключа при вставке записи. Это может быть немного более результативным, если он удалит дополнительный db-хит.

+0

Thanks Michael. Я представил себе, что делать что-то подобное было бы общим. Не думал о подборе в вставке, хороший отзыв о производительности, спасибо. –

0

для периодического процесса - если вам требуется какой-либо, где вы можете позвонить использовать ниже метод в любом месте в пакетном режиме с помощью пакетной обработки слушателей

также ниже фрагмент кода, который я написал, работал для меня -

В Главное класс - загрузить контекст приложения в статической переменной - APP_CONTEXT

Если вы не используете подхода, основанного на XML - затем получить DataSource по авто-подключением, а затем вы можете использовать ниже код -

Connection conn = null; 
PreparedStatement pstmt= null; 

try { 


DataSource dataSource = (DataSource) Main.APP_CONTEXT 
     .getBean("dataSource"); 

conn = dataSource.getConnection(); 
pstmt = conn.prepareStatement(" your SQL query to insert "); 

pstmtMstr.executeQuery();

} catch (Exception e) { 

}finally{ 

    if(pstmt!=null){ 
     pstmt.close(); 
    }if(conn!=null){ 
     conn.close(); 
    } 


} 
Смежные вопросы