Все драйверы, совместимые с JDBC 4 и выше, содержат файл определения сервиса для использования с java.util.ServiceLoader
. Если у вашего приложения есть драйвер в начальном пути к классу, вам не нужно ничего делать, поскольку java.sql.DriverManager
автоматически загрузит эти драйверы.
Если драйвер находится на пути вторичного класса (например, вконтекст веб-приложения или загрузчик классов, инициализируемый вручную), тогда вам потребуется вручную загрузить драйвер, чтобы зарегистрировать его. В этом случае должна быть возможность использовать ServiceLoader
для перечисления всех доступных драйверов в пути классов этого контекста.
Это можно сделать с помощью ServiceLoader.load(Class<S> service)
или ServiceLoader.load(Class<S> service, ClassLoader loader)
. Затем вы можете выполнять итерацию (или потоковую передачу) экземпляров доступных драйверов (которые будут автоматически регистрировать их с помощью DriverManager
).
Например,
ServiceLoader<Driver> drivers = ServiceLoader.load(java.sql.Driver.class, yourClassLoader);
for (Driver driver : drivers) {
System.out.println(driver.getClass().getName());
}
Единственное, что вам нужно знать, этоправильный URL-адрес JDBC для подключения.
Пожалуйста, примите во внимание, что это может вызвать утечку памяти, если ваш загрузчик классов имеет короткое время жизни: вам нужно явно отменить регистрацию драйвера, чтобы избежать такой утечки.