Comment gérer un grand jeu de données à l'aide de Printemps MySQL et RowCallbackHandler
J'essaie d'aller sur chaque ligne d'une table dans MySQL à l'aide de Printemps et un JdbcTemplate. Si je ne me trompe pas, cela devrait être aussi simple que:
JdbcTemplate template = new JdbcTemplate(datasource);
template.setFetchSize(1);
//template.setFetchSize(Integer.MIN_VALUE) does not work either
template.query("SELECT * FROM cdr", new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
System.out.println(rs.getString("src"));
}
});
- Je obtenir une OutOfMemoryError parce qu'il est en train d'essayer de lire l'ensemble de la chose. Des idées?
- Hey, soin de changer la accepté de répondre. Votre question a été sur le printemps et l' @scompt.com's réponse est plus approprié. Merci beaucoup.
Vous devez vous connecter pour publier un commentaire.
La
Statement#setFetchSize()
javadoc déjà membres:Le pilote est en fait libre de les appliquer ou de les ignorer l'indicateur. Certains pilotes de l'ignorer, certains pilotes s'applique directement, certains pilotes a besoin de plus de paramètres. Le pilote JDBC MySQL tombe dans cette dernière catégorie. Si vous cochez la Pilote JDBC MySQL documentation, vous verrez les informations suivantes (faites défiler environ 2/3 vers le bas jusqu'à ce que l'en-tête ResultSet):
Veuillez lire la ensemble section du document, il décrit les mises en garde de cette approche.
De l'obtenir pour fonctionner au Printemps, vous aurez cependant besoin de s'étendre/remplacer les JdbcTemplate avec une mesure de mise en œuvre. Comme je ne fais pas de Printemps, je ne peux pas aller dans les détails à ce sujet, mais maintenant, vous avez au moins savoir où chercher.
Bonne chance.
Ici le Printemps solution basée sur le réponse fournis par BalusC.
Quelque part dans votre code:
Si vous pensez que vous êtes l'obtention de la OutOfMemory erreur due à l'ensemble de la lecture de la table, pourquoi ne pas vous essayez de diviser votre requête. L'utilisation de filtres, clause LIMIT etc.