diff --git a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/AbsolutePathURLProvider.java b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/AbsolutePathURLProvider.java index 3d95c8fda88ce..56b13140d8446 100644 --- a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/AbsolutePathURLProvider.java +++ b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/AbsolutePathURLProvider.java @@ -29,6 +29,8 @@ import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Absolute path URL provider. @@ -55,10 +57,28 @@ public byte[] getContent(final String url, final String urlPrefix) { String line; while (null != (line = reader.readLine())) { if (!line.startsWith("#")) { + line = replaceVariables(line); builder.append(line).append('\n'); } } return builder.toString().getBytes(StandardCharsets.UTF_8); } } + + private String replaceVariables(final String line) { + Pattern variablePattern = Pattern.compile("\\$\\{(.+?)\\}"); + Matcher matcher = variablePattern.matcher(line); + StringBuffer modifiedLine = new StringBuffer(); + while (matcher.find()) { + String variable = matcher.group(1); + String env = variable.split(":")[0]; + String value = System.getenv(env); + if (value == null || value.isEmpty()) { + value = variable.split(":")[1]; + } + matcher.appendReplacement(modifiedLine, value); + return modifiedLine.toString(); + } + return line; + } } diff --git a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathURLProvider.java b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathURLProvider.java index d34e395c37c62..09f3e9bab4109 100644 --- a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathURLProvider.java +++ b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathURLProvider.java @@ -27,6 +27,8 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Classpath URL provider. @@ -53,6 +55,7 @@ public byte[] getContent(final String url, final String urlPrefix) { String line; while (null != (line = reader.readLine())) { if (!line.startsWith("#")) { + line = replaceVariables(line); builder.append(line).append('\n'); } } @@ -68,4 +71,21 @@ private InputStream getResourceAsStream(final String resource) { } throw new IllegalArgumentException(String.format("Can not find configuration file `%s`.", resource)); } + + private String replaceVariables(final String line) { + Pattern variablePattern = Pattern.compile("\\$\\{(.+?)\\}"); + Matcher matcher = variablePattern.matcher(line); + StringBuffer modifiedLine = new StringBuffer(); + while (matcher.find()) { + String variable = matcher.group(1); + String env = variable.split(":")[0]; + String value = System.getenv(env); + if (value == null || value.isEmpty()) { + value = variable.split(":")[1]; + } + matcher.appendReplacement(modifiedLine, value); + return modifiedLine.toString(); + } + return line; + } } diff --git a/jdbc/core/src/test/resources/config/driver/foo-driver-fixture.yaml b/jdbc/core/src/test/resources/config/driver/foo-driver-fixture.yaml index 026cec851556a..395efd4cd34a9 100644 --- a/jdbc/core/src/test/resources/config/driver/foo-driver-fixture.yaml +++ b/jdbc/core/src/test/resources/config/driver/foo-driver-fixture.yaml @@ -22,7 +22,7 @@ dataSources: dataSourceClassName: com.zaxxer.hikari.HikariDataSource driverClassName: org.h2.Driver jdbcUrl: jdbc:h2:mem:foo_ds_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MySQL - username: sa + username: ${DATASOURCE_USERNAME:sa} password: ds_1: dataSourceClassName: com.zaxxer.hikari.HikariDataSource