This is an automated email from the ASF dual-hosted git repository.
xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new 77f925def4 [fix] resource leak risk (#6085)
77f925def4 is described below
commit 77f925def4a267ce5f0851ff7898e2f0747f4099
Author: Jast <[email protected]>
AuthorDate: Wed Aug 6 13:47:34 2025 +0800
[fix] resource leak risk (#6085)
* fix: prevent resource leak by using try-with-resources for CA cert stream
* fix: prevent resource leak by using try-with-resources for database
connection
---------
Co-authored-by: aias00 <[email protected]>
---
.../admin/config/KubernetesConfiguration.java | 4 +-
.../shenyu/admin/spring/LocalDataSourceLoader.java | 49 +++++++++++-----------
2 files changed, 27 insertions(+), 26 deletions(-)
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/KubernetesConfiguration.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/KubernetesConfiguration.java
index a856c9f22b..21059a6a34 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/KubernetesConfiguration.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/KubernetesConfiguration.java
@@ -55,7 +55,9 @@ public class KubernetesConfiguration {
deploymentProperties.getToken(),
false
);
- client.setSslCaCert(new
FileInputStream(deploymentProperties.getCaCertPath()));
+ try (FileInputStream caCertStream = new
FileInputStream(deploymentProperties.getCaCertPath())) {
+ client.setSslCaCert(caCertStream);
+ }
return new AppsV1Api(client);
} catch (IOException e) {
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/spring/LocalDataSourceLoader.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/spring/LocalDataSourceLoader.java
index de6ca53672..2929c7f6c6 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/spring/LocalDataSourceLoader.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/spring/LocalDataSourceLoader.java
@@ -71,8 +71,9 @@ public class LocalDataSourceLoader implements
InstantiationAwareBeanPostProcesso
// because the shenyu database does not need to be specified when
executing the SQL file,
// otherwise the shenyu database will be disconnected when the
shenyu database does not exist
String jdbcUrl = StringUtils.replace(properties.getUrl(),
"/shenyu?", "?");
- Connection connection = DriverManager.getConnection(jdbcUrl,
properties.getUsername(), properties.getPassword());
- this.execute(connection, dataBaseProperties.getInitScript());
+ try (Connection connection = DriverManager.getConnection(jdbcUrl,
properties.getUsername(), properties.getPassword())) {
+ this.execute(connection, dataBaseProperties.getInitScript());
+ }
} catch (Exception e) {
LOG.error("Datasource init error.", e);
throw new ShenyuException(e.getMessage());
@@ -81,32 +82,30 @@ public class LocalDataSourceLoader implements
InstantiationAwareBeanPostProcesso
protected void execute(final Connection conn, final String script) throws
Exception {
ScriptRunner runner = new ScriptRunner(conn);
- try {
- // doesn't print logger
- runner.setLogWriter(null);
- runner.setAutoCommit(true);
- runner.setFullLineDelimiter(false);
- runner.setSendFullScript(false);
- runner.setStopOnError(false);
- Resources.setCharset(StandardCharsets.UTF_8);
- List<String> initScripts = Splitter.on(";").splitToList(script);
- for (String sqlScript : initScripts) {
- if (sqlScript.startsWith(PRE_FIX)) {
- String sqlFile = sqlScript.substring(PRE_FIX.length());
- try (Reader fileReader = getResourceAsReader(sqlFile)) {
- LOG.info("execute shenyu schema sql: {}", sqlFile);
- runner.runScript(fileReader);
- }
- } else {
- try (Reader fileReader =
Resources.getResourceAsReader(sqlScript)) {
- LOG.info("execute shenyu schema sql: {}", sqlScript);
- runner.runScript(fileReader);
- }
+ // doesn't print logger
+ runner.setLogWriter(null);
+ runner.setAutoCommit(true);
+ runner.setFullLineDelimiter(false);
+ runner.setSendFullScript(false);
+ runner.setStopOnError(false);
+ Resources.setCharset(StandardCharsets.UTF_8);
+ List<String> initScripts = Splitter.on(";").splitToList(script);
+ for (String sqlScript : initScripts) {
+ if (sqlScript.startsWith(PRE_FIX)) {
+ String sqlFile = sqlScript.substring(PRE_FIX.length());
+ try (Reader fileReader = getResourceAsReader(sqlFile)) {
+ LOG.info("execute shenyu schema sql: {}", sqlFile);
+ runner.runScript(fileReader);
+ }
+ } else {
+ try (Reader fileReader =
Resources.getResourceAsReader(sqlScript)) {
+ LOG.info("execute shenyu schema sql: {}", sqlScript);
+ runner.runScript(fileReader);
}
}
- } finally {
- runner.closeConnection();
}
+ // Note: Connection will be automatically closed by try-with-resources
in init() method
+ // No need to call runner.closeConnection() here to avoid double
closing
}
private static Reader getResourceAsReader(final String resource) throws
IOException {