From 8e7982397c1602d50dbbd372da6219e723ec1246 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 28 Nov 2011 13:33:13 +0000 Subject: [PATCH] SimpleJdbcTestUtils executeSqlScript properly closes its LineNumberReader after use (SPR-8872) --- .../test/jdbc/SimpleJdbcTestUtils.java | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/org.springframework.test/src/main/java/org/springframework/test/jdbc/SimpleJdbcTestUtils.java b/org.springframework.test/src/main/java/org/springframework/test/jdbc/SimpleJdbcTestUtils.java index 72b8d822d4..3716ab8df9 100644 --- a/org.springframework.test/src/main/java/org/springframework/test/jdbc/SimpleJdbcTestUtils.java +++ b/org.springframework.test/src/main/java/org/springframework/test/jdbc/SimpleJdbcTestUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -40,6 +40,7 @@ import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; * @author Thomas Risberg * @since 2.5 */ +@SuppressWarnings("deprecation") public abstract class SimpleJdbcTestUtils { private static final Log logger = LogFactory.getLog(SimpleJdbcTestUtils.class); @@ -86,9 +87,8 @@ public abstract class SimpleJdbcTestUtils { * @throws DataAccessException if there is an error executing a statement * and continueOnError was false */ - public static void executeSqlScript(SimpleJdbcTemplate simpleJdbcTemplate, - ResourceLoader resourceLoader, String sqlResourcePath, boolean continueOnError) - throws DataAccessException { + public static void executeSqlScript(SimpleJdbcTemplate simpleJdbcTemplate, ResourceLoader resourceLoader, + String sqlResourcePath, boolean continueOnError) throws DataAccessException { Resource resource = resourceLoader.getResource(sqlResourcePath); executeSqlScript(simpleJdbcTemplate, resource, continueOnError); @@ -107,8 +107,8 @@ public abstract class SimpleJdbcTestUtils { * @throws DataAccessException if there is an error executing a statement * and continueOnError was false */ - public static void executeSqlScript(SimpleJdbcTemplate simpleJdbcTemplate, - Resource resource, boolean continueOnError) throws DataAccessException { + public static void executeSqlScript(SimpleJdbcTemplate simpleJdbcTemplate, Resource resource, + boolean continueOnError) throws DataAccessException { executeSqlScript(simpleJdbcTemplate, new EncodedResource(resource), continueOnError); } @@ -126,8 +126,8 @@ public abstract class SimpleJdbcTestUtils { * @throws DataAccessException if there is an error executing a statement * and continueOnError was false */ - public static void executeSqlScript(SimpleJdbcTemplate simpleJdbcTemplate, - EncodedResource resource, boolean continueOnError) throws DataAccessException { + public static void executeSqlScript(SimpleJdbcTemplate simpleJdbcTemplate, EncodedResource resource, + boolean continueOnError) throws DataAccessException { if (logger.isInfoEnabled()) { logger.info("Executing SQL script from " + resource); @@ -135,12 +135,13 @@ public abstract class SimpleJdbcTestUtils { long startTime = System.currentTimeMillis(); List statements = new LinkedList(); + LineNumberReader reader = null; try { - LineNumberReader lnr = new LineNumberReader(resource.getReader()); - String script = JdbcTestUtils.readScript(lnr); + reader = new LineNumberReader(resource.getReader()); + String script = JdbcTestUtils.readScript(reader); char delimiter = ';'; if (!JdbcTestUtils.containsSqlScriptDelimiters(script, delimiter)) { - delimiter = '\n'; + delimiter = '\n'; } JdbcTestUtils.splitSqlScript(script, delimiter, statements); for (String statement : statements) { @@ -169,6 +170,17 @@ public abstract class SimpleJdbcTestUtils { catch (IOException ex) { throw new DataAccessResourceFailureException("Failed to open SQL script from " + resource, ex); } + finally { + try { + if (reader != null) { + reader.close(); + } + } + catch (IOException ex) { + // ignore + } + + } } }