Как я вручную настраиваю DataSource в Java?

Согласно pydoc, hasattr (obj, опора) просто называет getattr (obj, опора) и ловит исключения. Так, это столь же допустимо, чтобы обернуть доступ атрибута с оператором попытки и поймать AttributeError, как это должно использовать hasattr () заранее.

a = SomeClass()
try:
    return a.fake_prop
except AttributeError:
    return default_value
43
задан Eric Wilson 26 August 2009 в 19:35
поделиться

4 ответа

В основном в JDBC большинство этих свойств не настраиваются в API таким образом, скорее они зависят от реализации. JDBC обрабатывает это, позволяя URL подключения быть разным для разных поставщиков.

Итак, что вы делаете, это регистрируете драйвер, чтобы система JDBC могла знать, что делать с URL:

 DriverManager.registerDriver((Driver) Class.forName("com.mysql.jdbc.Driver").newInstance());

Затем вы формируете URL :

 String url = "jdbc:mysql://[host][,failoverhost...][:port]/[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]"

И, наконец, используйте его для установления соединения:

 Connection c = DriverManager.getConnection(url);

В более сложном JDBC вы связаны с пулами соединений и т.п., а серверы приложений часто имеют свой собственный способ регистрации драйверов в JNDI, и вы ищете DataSource оттуда и вызовите на нем getConnection.

Что касается свойств, поддерживаемых MySQL, см. здесь .

EDIT: Еще одна мысль,

21
ответ дан 26 November 2019 в 22:24
поделиться

Возможно, вам стоит обратить внимание на проект Commons DBCP . Он предоставляет BasicDataSource , который настроен примерно так же, как в вашем примере. Чтобы использовать это, вам понадобится JDBC JAR поставщика базы данных в пути к классам, и вы должны указать имя класса драйвера поставщика и URL базы данных в правильном формате.

Изменить:

Если вы хотите настроить BasicDataSource для MySQL вы должны сделать что-то вроде этого:

BasicDataSource dataSource = new BasicDataSource();

dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("username");
dataSource.setPassword("password");
dataSource.setUrl("jdbc:mysql://<host>:<port>/<database>");
dataSource.setMaxActive(10);
dataSource.setMaxIdle(5);
dataSource.setInitialSize(5);
dataSource.setValidationQuery("SELECT 1");

Код, которому требуется DataSource , затем может его использовать.

127
ответ дан 26 November 2019 в 22:24
поделиться

Я думаю, что пример неверен - javax.sql.DataSource также не имеет этих свойств. Ваш DataSource должен иметь тип org.apache.derby.jdbc.ClientDataSource , который должен иметь эти свойства.

2
ответ дан 26 November 2019 в 22:24
поделиться

Документ javadoc для DataSource, на который вы ссылаетесь, имеет неправильный пакет. Вам следует посмотреть javax.sql.DataSource . Как видите, это интерфейс. Конфигурация имени хоста и порта зависит от реализации, то есть от используемого вами драйвера JDBC.

Я не проверял документы Derby javadocs, но полагаю, что код должен компилироваться следующим образом:

ClientDataSource ds = org.apache.derby.jdbc.ClientDataSource()
ds.setHost etc....
1
ответ дан 26 November 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: