Spring SimpleJdbcTemplate: java.lang.OutOfMemoryError: Превышен лимит накладных расходов GC - PullRequest
1 голос
/ 27 июля 2011

Я погружаю свой палец в Spring и использую SimpleJdbcTemplate, чтобы помочь уменьшить объем кода, который мне нужно написать, но теперь у меня возникла проблема, связанная с исключением: "брошен. Я вытаскивал категории из eBay, используя их веб-сервисы, и вставлял каждую категорию (я думаю, около 10 000 записей) с помощью вызова jdbTemplate.update (см. Код ниже)

CategoryService:

// If the category already exist (i.e. an error is throuwn as the version must be unique) than do now bother sotring the categories
for(CategoryType ct : categories)
{
    try
    {
        // TODO: Determine why a child ategory can be tied to multiple parents, for now just use the first category in the array
        categoryDao.SaveCategory(ct.getCategoryID(), ct.getCategoryName(), ct.getCategoryParentID()[0]);
    }
    catch(DuplicateKeyException e)
    {
        // No problem here, the version description is the same... just continue as if nothing happened
    }
}

CategoryDaoImpl: (реализация интерфейса CategoryDao)

@Override
public int SaveCategory(String ebayCategoryId, String ebayCategoryName, String ebayParentCategoryId) 
{
    // Firstly grab the next value in the categoru sequence
    int internalCategoryId = jdbcTemplate.queryForInt(categorySequenceStatement);

    // Insert the new category
    jdbcTemplate.update(insertCategoryStatement, new Object[] {internalCategoryId, ebayCategoryId, ebayCategoryName, ebayParentCategoryId});

    return internalCategoryId;
}

Окружающая среда:

  • Spring Framework 3.0.2
  • Oracle Database XE (я думаю, 11g!) (С использованием ojdbc6.jar)
  • JDK (jdk1.6.0_26)

Я хотя и использовал метод batchUpdate в SimpleJdbcTemplate, но я не уверен, есть ли здесь основная проблема.

Буду признателен за любую помощь!

1 Ответ

1 голос
/ 27 июля 2011

Прекратить загрузку всех категорий в память одновременно. Обработайте каждую категорию как она загружена. Это будет как минимум на порядок быстрее и не вызовет ООМ.

...