"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como transmitir grandes conjuntos de resultados do MySQL no Spring para evitar OutOfMemoryError?

Como transmitir grandes conjuntos de resultados do MySQL no Spring para evitar OutOfMemoryError?

Publicado em 2024-12-22
Navegar:905

How to Stream Large MySQL Result Sets in Spring to Avoid OutOfMemoryError?

Streaming grandes conjuntos de resultados com MySQL

Ao lidar com tabelas MySQL extensas em um aplicativo Spring, uma OutOfMemoryException pode surgir conforme o driver se esforça para carregue a tabela inteira na memória. Configurando instrução.setFetchSize(Integer.MIN_VALUE); pode não ser suficiente, pois isso apenas fornece uma dica para o driver JDBC.

Para ativar o streaming de conjuntos de resultados no driver MySQL JDBC, é necessária uma abordagem mais abrangente:

  1. Criar uma instância de extrato:

    stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
  2. Defina a busca Tamanho:

    stmt.setFetchSize(Integer.MIN_VALUE);

Cuidados:

Este método tem certos advertências:

  • Todas as linhas no conjunto de resultados devem ser lidas (ou o conjunto de resultados fechado) antes de emitir qualquer consulta adicional no conexão. Não fazer isso resultará em exceções.
  • Dentro de uma transação, os bloqueios só são liberados quando a transação é concluída, o que implica que a instrução deve terminar a execução primeiro.
  • Se o OutOfMemoryError persistir, o problema subjacente pode estar no uso excessivo de memória no código Java. Isso requer processamento imediato de dados em vez de armazenamento.

Insights adicionais:

Para obter mais estratégias sobre como lidar com grandes conjuntos de resultados, considere esta pergunta relacionada e sua resposta: [link para pergunta semelhante].

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3