This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 351b72901af shardingsphere driver supports url prefix (#26789)
351b72901af is described below
commit 351b72901afef90f997db63c2a2257da0ce36856
Author: ZhangCheng <[email protected]>
AuthorDate: Thu Jul 6 15:03:01 2023 +0800
shardingsphere driver supports url prefix (#26789)
---
.../apache/shardingsphere/driver/ShardingSphereDriver.java | 6 ++++--
.../driver/jdbc/core/driver/DriverDataSourceCache.java | 11 ++++++-----
.../jdbc/core/driver/ShardingSphereDriverURLManager.java | 7 ++++---
.../jdbc/core/driver/ShardingSphereDriverURLProvider.java | 7 ++++---
.../jdbc/core/driver/spi/AbsolutePathDriverURLProvider.java | 4 ++--
.../driver/jdbc/core/driver/spi/ApolloDriverURLProvider.java | 4 ++--
.../jdbc/core/driver/spi/ClasspathDriverURLProvider.java | 4 ++--
.../driver/jdbc/core/driver/DriverDataSourceCacheTest.java | 10 ++++++----
.../jdbc/core/driver/ShardingSphereDriverURLManagerTest.java | 10 ++++++----
9 files changed, 36 insertions(+), 27 deletions(-)
diff --git
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/ShardingSphereDriver.java
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/ShardingSphereDriver.java
index 0f147a28bb1..cc445e558da 100644
---
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/ShardingSphereDriver.java
+++
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/ShardingSphereDriver.java
@@ -32,6 +32,8 @@ import java.util.logging.Logger;
*/
public final class ShardingSphereDriver implements Driver {
+ private static final String DRIVER_URL_PREFIX = "jdbc:shardingsphere:";
+
private static final int MAJOR_DRIVER_VERSION = 5;
private static final int MINOR_DRIVER_VERSION = 1;
@@ -48,12 +50,12 @@ public final class ShardingSphereDriver implements Driver {
@Override
public Connection connect(final String url, final Properties info) throws
SQLException {
- return acceptsURL(url) ? dataSourceCache.get(url).getConnection() :
null;
+ return acceptsURL(url) ? dataSourceCache.get(url,
DRIVER_URL_PREFIX).getConnection() : null;
}
@Override
public boolean acceptsURL(final String url) {
- return null != url && url.startsWith("jdbc:shardingsphere:");
+ return null != url && url.startsWith(DRIVER_URL_PREFIX);
}
@Override
diff --git
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCache.java
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCache.java
index a48bbceea9a..6bc221bda34 100644
---
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCache.java
+++
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCache.java
@@ -34,21 +34,22 @@ public final class DriverDataSourceCache {
/**
* Get data source.
- *
+ *
* @param url URL
+ * @param urlPrefix url prefix
* @return got data source
*/
- public DataSource get(final String url) {
+ public DataSource get(final String url, final String urlPrefix) {
if (dataSourceMap.containsKey(url)) {
return dataSourceMap.get(url);
}
- return dataSourceMap.computeIfAbsent(url, this::createDataSource);
+ return dataSourceMap.computeIfAbsent(url, driverUrl ->
createDataSource(driverUrl, urlPrefix));
}
@SuppressWarnings("unchecked")
- private <T extends Throwable> DataSource createDataSource(final String
url) throws T {
+ private <T extends Throwable> DataSource createDataSource(final String
url, final String urlPrefix) throws T {
try {
- return
YamlShardingSphereDataSourceFactory.createDataSource(ShardingSphereDriverURLManager.getContent(url));
+ return
YamlShardingSphereDataSourceFactory.createDataSource(ShardingSphereDriverURLManager.getContent(url,
urlPrefix));
} catch (final IOException ex) {
throw (T) new SQLException(ex);
} catch (final SQLException ex) {
diff --git
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManager.java
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManager.java
index 6f115813e3a..47120eba5ca 100644
---
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManager.java
+++
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManager.java
@@ -30,15 +30,16 @@ public final class ShardingSphereDriverURLManager {
/**
* Get config content from URL.
- *
+ *
* @param url driver URL
+ * @param urlPrefix url prefix
* @return configuration content
* @throws DriverURLProviderNotFoundException driver URL provider not
found exception
*/
- public static byte[] getContent(final String url) {
+ public static byte[] getContent(final String url, final String urlPrefix) {
for (ShardingSphereDriverURLProvider each :
ShardingSphereServiceLoader.getServiceInstances(ShardingSphereDriverURLProvider.class))
{
if (each.accept(url)) {
- return each.getContent(url);
+ return each.getContent(url, urlPrefix);
}
}
throw new DriverURLProviderNotFoundException(url);
diff --git
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLProvider.java
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLProvider.java
index 0a40a2ea1b7..6237b6cffb0 100644
---
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLProvider.java
+++
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLProvider.java
@@ -32,9 +32,10 @@ public interface ShardingSphereDriverURLProvider {
/**
* Get config content from url.
- *
- * @param url the driver url
+ *
+ * @param url the driver url
+ * @param urlPrefix url prefix
* @return the config content
*/
- byte[] getContent(String url);
+ byte[] getContent(String url, String urlPrefix);
}
diff --git
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/AbsolutePathDriverURLProvider.java
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/AbsolutePathDriverURLProvider.java
index afe4d4a22f5..f5b5ca30c33 100644
---
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/AbsolutePathDriverURLProvider.java
+++
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/AbsolutePathDriverURLProvider.java
@@ -44,8 +44,8 @@ public final class AbsolutePathDriverURLProvider implements
ShardingSphereDriver
@Override
@SneakyThrows(IOException.class)
- public byte[] getContent(final String url) {
- String configuredFile = url.substring("jdbc:shardingsphere:".length(),
url.contains("?") ? url.indexOf('?') : url.length());
+ public byte[] getContent(final String url, final String urlPrefix) {
+ String configuredFile = url.substring(urlPrefix.length(),
url.contains("?") ? url.indexOf('?') : url.length());
String file = configuredFile.substring(PATH_TYPE.length());
Preconditions.checkArgument(!file.isEmpty(), "Configuration file is
required in ShardingSphere driver URL.");
try (
diff --git
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ApolloDriverURLProvider.java
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ApolloDriverURLProvider.java
index 888c3fa6cd8..751b618e74b 100644
---
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ApolloDriverURLProvider.java
+++
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ApolloDriverURLProvider.java
@@ -39,8 +39,8 @@ public final class ApolloDriverURLProvider implements
ShardingSphereDriverURLPro
}
@Override
- public byte[] getContent(final String url) {
- String configPath = url.substring("jdbc:shardingsphere:".length(),
url.contains("?") ? url.indexOf('?') : url.length());
+ public byte[] getContent(final String url, final String urlPrefix) {
+ String configPath = url.substring(urlPrefix.length(),
url.contains("?") ? url.indexOf('?') : url.length());
String namespace = configPath.substring(APOLLO_TYPE.length());
Preconditions.checkArgument(!namespace.isEmpty(), "Apollo namespace is
required in ShardingSphere driver URL.");
ConfigFile configFile = ConfigService.getConfigFile(namespace,
ConfigFileFormat.YAML);
diff --git
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathDriverURLProvider.java
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathDriverURLProvider.java
index 68f6f6be0cd..c4a5fa56b6c 100644
---
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathDriverURLProvider.java
+++
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/ClasspathDriverURLProvider.java
@@ -42,8 +42,8 @@ public final class ClasspathDriverURLProvider implements
ShardingSphereDriverURL
@Override
@SneakyThrows(IOException.class)
- public byte[] getContent(final String url) {
- String configuredFile = url.substring("jdbc:shardingsphere:".length(),
url.contains("?") ? url.indexOf('?') : url.length());
+ public byte[] getContent(final String url, final String urlPrefix) {
+ String configuredFile = url.substring(urlPrefix.length(),
url.contains("?") ? url.indexOf('?') : url.length());
String file = configuredFile.substring(CLASSPATH_TYPE.length());
Preconditions.checkArgument(!file.isEmpty(), "Configuration file is
required in ShardingSphere driver URL.");
try (
diff --git
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCacheTest.java
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCacheTest.java
index b002686e318..e976ebe0e2a 100644
---
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCacheTest.java
+++
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/DriverDataSourceCacheTest.java
@@ -27,19 +27,21 @@ import static org.hamcrest.MatcherAssert.assertThat;
class DriverDataSourceCacheTest {
+ private static final String DRIVER_URL_PREFIX = "jdbc:shardingsphere:";
+
@Test
void assertGetNewDataSource() {
DriverDataSourceCache dataSourceCache = new DriverDataSourceCache();
- DataSource fooDataSource =
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml");
- DataSource barDataSource =
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/bar-driver-fixture.yaml");
+ DataSource fooDataSource =
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml",
DRIVER_URL_PREFIX);
+ DataSource barDataSource =
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/bar-driver-fixture.yaml",
DRIVER_URL_PREFIX);
assertThat(fooDataSource, not(barDataSource));
}
@Test
void assertGetExistedDataSource() {
DriverDataSourceCache dataSourceCache = new DriverDataSourceCache();
- DataSource dataSource1 =
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml");
- DataSource dataSource2 =
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml");
+ DataSource dataSource1 =
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml",
DRIVER_URL_PREFIX);
+ DataSource dataSource2 =
dataSourceCache.get("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml",
DRIVER_URL_PREFIX);
assertThat(dataSource1, is(dataSource2));
}
}
diff --git
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManagerTest.java
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManagerTest.java
index d07e5810357..b67572a7759 100644
---
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManagerTest.java
+++
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/ShardingSphereDriverURLManagerTest.java
@@ -43,21 +43,23 @@ class ShardingSphereDriverURLManagerTest {
private final int fooDriverConfigLength = 999;
+ private final String urlPrefix = "jdbc:shardingsphere:";
+
@Test
void assertNewConstructorWithEmptyURL() {
- assertThrows(DriverURLProviderNotFoundException.class, () ->
ShardingSphereDriverURLManager.getContent("jdbc:shardingsphere:"));
+ assertThrows(DriverURLProviderNotFoundException.class, () ->
ShardingSphereDriverURLManager.getContent("jdbc:shardingsphere:", urlPrefix));
}
@Test
void assertToClasspathConfigurationFile() {
- byte[] actual =
ShardingSphereDriverURLManager.getContent("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml");
+ byte[] actual =
ShardingSphereDriverURLManager.getContent("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml",
urlPrefix);
assertThat(actual.length, is(fooDriverConfigLength));
}
@Test
void assertToAbsolutePathConfigurationFile() {
String absolutePath =
Objects.requireNonNull(Thread.currentThread().getContextClassLoader().getResource("config/driver/foo-driver-fixture.yaml")).getPath();
- byte[] actual =
ShardingSphereDriverURLManager.getContent("jdbc:shardingsphere:absolutepath:" +
absolutePath);
+ byte[] actual =
ShardingSphereDriverURLManager.getContent("jdbc:shardingsphere:absolutepath:" +
absolutePath, urlPrefix);
assertThat(actual.length, is(fooDriverConfigLength));
}
@@ -67,7 +69,7 @@ class ShardingSphereDriverURLManagerTest {
when(configFile.getContent()).thenReturn("config content");
when(ConfigService.getConfigFile(anyString(),
any(ConfigFileFormat.class))).thenReturn(configFile);
String url = "jdbc:shardingsphere:apollo:namespace";
- byte[] content = ShardingSphereDriverURLManager.getContent(url);
+ byte[] content = ShardingSphereDriverURLManager.getContent(url,
urlPrefix);
assertThat("config content".getBytes(StandardCharsets.UTF_8),
is(content));
}
}