Tengo el siguiente código:¿Cómo reutilizar la misma conexión con Spring's JdbcTemplate?
@Test
public void springTest() throws SQLException{
//Connect to the DB.
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUrl("jdbc:h2:/data/h2/testa");
dataSource.setUsername("");
dataSource.setPassword("");
JdbcTemplate jt=new JdbcTemplate(dataSource);
jt.execute("SELECT 1");
jt.execute("SELECT 1");
}
espero que los dos execute() líneas de reutilizar la misma conexión. Sin embargo, la salida del registro dice:
2011-02-10 12:24:17 DriverManagerDataSource [INFO] Loaded JDBC driver: org.h2.Driver 2011-02-10 12:24:17 JdbcTemplate [DEBUG] Executing SQL statement [SELECT 1] 2011-02-10 12:24:17 DataSourceUtils [DEBUG] Fetching JDBC Connection from DataSource 2011-02-10 12:24:17 DriverManagerDataSource [DEBUG] Creating new JDBC DriverManager Connection to [jdbc:h2:/data/h2/testa] 2011-02-10 12:24:17 DataSourceUtils [DEBUG] Returning JDBC Connection to DataSource 2011-02-10 12:24:17 JdbcTemplate [DEBUG] Executing SQL statement [SELECT 1] 2011-02-10 12:24:17 DataSourceUtils [DEBUG] Fetching JDBC Connection from DataSource 2011-02-10 12:24:17 DriverManagerDataSource [DEBUG] Creating new JDBC DriverManager Connection to [jdbc:h2:/data/h2/testa] 2011-02-10 12:24:17 DataSourceUtils [DEBUG] Returning JDBC Connection to DataSource
El ejemplo anterior funciona bastante rápido, pero tengo un pedazo más grande de código que hace básicamente lo mismo y se cuelga durante mucho tiempo en Creating new JDBC DriverManager Connection
. Nunca recibo un error, pero hace que el código se ejecute muy lentamente. ¿De alguna manera puedo refactorizar el código anterior para simplemente usar la misma conexión?
Gracias
Eso es un cambio fácil y parece haber funcionado. ¿Es seguro para subprocesos? – User1
Es seguro para subprocesos, porque esto es de lo que se trata un conjunto de conexiones. :) Usé esto también en mis casos de prueba, con la condición de que cablee 'dataSource' en lugar de crearlo programáticamente. – limc
¡Vaya, mi gran código acaba de obtener 100 veces más rápido! – User1