2010-08-09 10 views
6

He intentado usar la primavera 3.0 SimpleJdbcTemplate y me lleva 5 minutos insertar 1500 registros, mientras que me toma unos segundos. para insertar usando JDBC directo. No estoy seguro de lo que estoy haciendo mal.Spring JDBC vs JDBC

+1

¿Se puede pasar el código? – dierre

+6

Esto no es una pregunta, ni proporciona ningún código para que escudriñamos, ¿cómo espera que lo ayudemos? Por favor, considere proporcionar más detalles. – Andrew

+0

No dice que debe tardar 5 minutos en insertarse, pero habrá un retraso cuando utilice cualquier marco de trabajo sobre "jdbc directo". Publique sus consultas/código para que podamos ver lo que está sucediendo. –

Respuesta

6

Si está construyendo un lote, considere usar el lote de primavera - JdbcBatchItemWriter con la configuración de tamaño de porción adecuada, que cargará estos 1500 registros en menos de un segundo.

1

Algunas cosas vale la pena mirar:

  • La sobrecarga podría estar en la transacción gestionada por la primavera en el nivel de aplicación. Mire qué tipo de administrador de transacciones está usando (busque un bean con el nombre transactionManager). Si está utilizando JTA, probablemente sea allí donde se encuentre su problema. Como es rápido con JDBC, el cuello de botella no parece ser el DB.
  • Dependiendo de cómo su aplicación esté usando esa transacción, podría contener todo en la memoria antes de que finalice las 1500 solicitudes y confirmaciones. ¿Ves una gran diferencia en el uso de la memoria (la primavera uno debería ser mucho mayor)?
  • ¿Qué tipo de grupo de conexión de base de datos está utilizando en cualquiera de los casos?

manera rápida al perfil de su aplicación:

Consigue la memoria pid - "jps -l"

: jmap -histo PID (compruebe si hay alguna forma de pérdida de memoria)

Comprobar lo que está pasando bajo el capó: jstack PID (busque llamadas a métodos lentos o recursivos)

-2

¿Qué le parece usar

jdbcTemplate.batchUpdate(new String[]{sql});