2017-02-18 35 views
0

Я очень новичок в Spring Batch. Мне нужно разработать весеннее пакетное приложение, которое считывает 1,00,000 записей из файла csv. Я разработал одно весеннее пакетное приложение, как показано ниже.создание весеннего пакетного объекта

<job id="hellojob" xmlns="http://www.springframework.org/schema/batch">  
     <step id="orderprocessor"> 
      <tasklet allow-start-if-complete="true"> 
       <chunk reader="reader" writer="writer" commit-interval="500" skip-limit="2"> 
         <skippable-exception-classes> 
          <include class="org.springframework.batch.item.file.FlatFileParseException" /> 
         </skippable-exception-classes> 
       </chunk> 
      </tasklet>     
     </step> 
    </job> 

Также я имею поле класса набор картографа, как

public class OrderDataMapper implements FieldSetMapper<Product> { 

    @Override 
    public Order mapFieldSet(FieldSet fieldSet) throws BindException { 

     Product product = new Product(); 
     order.setCustId(fieldSet.readString(0)); 
     order.setOrderNum(fieldSet.readString(1)); 
     order.setCountry(fieldSet.readString(2)); 
     return product; 

    } 

} 

согласно моему пониманию, указанное поле класса набор картографа вызывается для каждой записи, и каждый раз, когда он создает один новый объект. Таким образом, для 1,00,000 записей будет создано 1 000 000 объектов.

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

Пожалуйста, дайте мне знать, Есть ли способ, где я могу создать меньшее количество объектов, в то время как итерацию 1.00.000 записи

+0

Максимальное количество объектов на кусок указано в интервале фиксации; после того, как каждый кусок фиксирует 500 созданных объектов, доступных для сбора мусора. Я не понимаю вашего утверждения о GC: сборщик мусора - как я знаю - работает в выделенном потоке демона, отличном от прикладного потока –

ответ

0

ItemReader и ItemProcessor объектов обрабатывают индивидуально. Однако ItemWriter обрабатывается с режимом фрагментации с определением интервала подтверждения.

Следовательно, если интервал подтверждения установлен равным 500, Spring Batch будет хранить прочитанные и/или обработанные элементы и выполнить ItemWriter, когда он достигнет указанного номера.

С этого момента объекты будут доступны для устранения GC.