in flink-connector-jdbc-core/src/main/java/org/apache/flink/connector/jdbc/core/database/JdbcFactoryLoader.java [90:132]
private static JdbcFactory load(String url, ClassLoader classLoader) {
List<JdbcFactory> foundFactories = discoverFactories(classLoader);
if (foundFactories.isEmpty()) {
throw new IllegalStateException(
String.format(
"Could not find any jdbc factories that implement '%s' in the classpath.",
JdbcFactory.class.getName()));
}
final List<JdbcFactory> matchingFactories =
foundFactories.stream().filter(f -> f.acceptsURL(url)).collect(Collectors.toList());
if (matchingFactories.isEmpty()) {
throw new IllegalStateException(
String.format(
"Could not find any jdbc factory that can handle url '%s' that implements '%s' in the classpath.\n\n"
+ "Available factories are:\n\n"
+ "%s",
url,
JdbcFactory.class.getName(),
foundFactories.stream()
.map(f -> f.getClass().getName())
.distinct()
.sorted()
.collect(Collectors.joining("\n"))));
}
if (matchingFactories.size() > 1) {
throw new IllegalStateException(
String.format(
"Multiple jdbc factories can handle url '%s' that implement '%s' found in the classpath.\n\n"
+ "Ambiguous factory classes are:\n\n"
+ "%s",
url,
JdbcFactory.class.getName(),
matchingFactories.stream()
.map(f -> f.getClass().getName())
.sorted()
.collect(Collectors.joining("\n"))));
}
return matchingFactories.get(0);
}