From 0b82755796ddabceddb983b07a4dbb1108313c9b Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Sun, 21 Aug 2022 01:19:16 +0800 Subject: [PATCH] Fix some resource leak (#11576) --- .../dolphinscheduler/api/utils/FileUtils.java | 5 ++- .../dao/upgrade/SchemaUtils.java | 5 ++- .../tools/datasource/dao/UpgradeDao.java | 42 ++++++++++--------- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/FileUtils.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/FileUtils.java index 606dc6c396..3304d0c497 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/FileUtils.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/FileUtils.java @@ -20,6 +20,7 @@ import org.apache.commons.io.IOUtils; import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.net.MalformedURLException; import java.nio.charset.StandardCharsets; import java.nio.file.Path; @@ -76,8 +77,8 @@ public class FileUtils { * @return file content string */ public static String file2String(MultipartFile file) { - try { - return IOUtils.toString(file.getInputStream(), StandardCharsets.UTF_8); + try (InputStream inputStream = file.getInputStream()) { + return IOUtils.toString(inputStream, StandardCharsets.UTF_8); } catch (IOException e) { logger.error("file convert to string failed: {}", file.getName()); } diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/SchemaUtils.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/SchemaUtils.java index 625c3551f1..f0fdeeea56 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/SchemaUtils.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/SchemaUtils.java @@ -22,6 +22,7 @@ import org.apache.dolphinscheduler.common.utils.FileUtils; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -106,8 +107,8 @@ public class SchemaUtils { public static String getSoftVersion() throws IOException { final ClassPathResource softVersionFile = new ClassPathResource("sql/soft_version"); String softVersion; - try { - softVersion = FileUtils.readFile2Str(softVersionFile.getInputStream()); + try (InputStream inputStream = softVersionFile.getInputStream()) { + softVersion = FileUtils.readFile2Str(inputStream); softVersion = Strings.nullToEmpty(softVersion).replaceAll("\\s+|\r|\n", ""); } catch (FileNotFoundException e) { logger.error(e.getMessage(), e); diff --git a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/UpgradeDao.java b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/UpgradeDao.java index 49092a6bdc..c3dbbe9bce 100644 --- a/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/UpgradeDao.java +++ b/dolphinscheduler-tools/src/main/java/org/apache/dolphinscheduler/tools/datasource/dao/UpgradeDao.java @@ -107,8 +107,9 @@ public abstract class UpgradeDao { try (Connection conn = dataSource.getConnection()) { // Execute the dolphinscheduler_ddl.sql script to create the table structure of dolphinscheduler ScriptRunner initScriptRunner = new ScriptRunner(conn, true, true); - Reader initSqlReader = new InputStreamReader(mysqlSQLFilePath.getInputStream()); - initScriptRunner.runScript(initSqlReader); + try (Reader initSqlReader = new InputStreamReader(mysqlSQLFilePath.getInputStream())) { + initScriptRunner.runScript(initSqlReader); + } } catch (Exception e) { logger.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); @@ -299,22 +300,23 @@ public abstract class UpgradeDao { conn.setAutoCommit(false); // Execute the upgraded dolphinscheduler dml ScriptRunner scriptRunner = new ScriptRunner(conn, false, true); - Reader sqlReader = new InputStreamReader(sqlFilePath.getInputStream()); - scriptRunner.runScript(sqlReader); - if (isExistsTable(T_VERSION_NAME)) { - // Change version in the version table to the new version - String upgradeSQL = String.format("update %s set version = ?", T_VERSION_NAME); - pstmt = conn.prepareStatement(upgradeSQL); - pstmt.setString(1, schemaVersion); - pstmt.executeUpdate(); - } else if (isExistsTable(T_NEW_VERSION_NAME)) { - // Change version in the version table to the new version - String upgradeSQL = String.format("update %s set version = ?", T_NEW_VERSION_NAME); - pstmt = conn.prepareStatement(upgradeSQL); - pstmt.setString(1, schemaVersion); - pstmt.executeUpdate(); + try (Reader sqlReader = new InputStreamReader(sqlFilePath.getInputStream())) { + scriptRunner.runScript(sqlReader); + if (isExistsTable(T_VERSION_NAME)) { + // Change version in the version table to the new version + String upgradeSQL = String.format("update %s set version = ?", T_VERSION_NAME); + pstmt = conn.prepareStatement(upgradeSQL); + pstmt.setString(1, schemaVersion); + pstmt.executeUpdate(); + } else if (isExistsTable(T_NEW_VERSION_NAME)) { + // Change version in the version table to the new version + String upgradeSQL = String.format("update %s set version = ?", T_NEW_VERSION_NAME); + pstmt = conn.prepareStatement(upgradeSQL); + pstmt.setString(1, schemaVersion); + pstmt.executeUpdate(); + } + conn.commit(); } - conn.commit(); } catch (FileNotFoundException e) { try { conn.rollback(); @@ -363,9 +365,9 @@ public abstract class UpgradeDao { conn.setAutoCommit(true); // Execute the dolphinscheduler ddl.sql for the upgrade ScriptRunner scriptRunner = new ScriptRunner(conn, true, true); - Reader sqlReader = new InputStreamReader(sqlFilePath.getInputStream()); - scriptRunner.runScript(sqlReader); - + try (Reader sqlReader = new InputStreamReader(sqlFilePath.getInputStream())) { + scriptRunner.runScript(sqlReader); + } } catch (FileNotFoundException e) { logger.error(e.getMessage(), e);