Как выполнить пользовательский код перед созданием нового соединения из источника данных

#java #datasource

#java #источник данных

Вопрос:

Мне нужно выполнить пользовательский код до создания нового соединения в источнике данных. Я использую BasicDataSource для объединения в пул соединений. Я использую Spring JdbcTemplate с BasicDataSource, поэтому я не вызываю getConnection() вручную.

Мне нужно выполнить пользовательский код перед подключением, чтобы повторно войти в систему с учетными данными kerberos для hive jdbc.

Возможно ли сделать что-то подобное?

Я создаю соединение с приведенным ниже примером кода

 @Bean
public DataSource dataSource() {

    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setUrl(url);
    dataSource.setUsername(userName);
    dataSource.setPassword(password);
    dataSource.setDriverClassName(driverClass)

    return dataSource;
}
 

Спасибо

Комментарии:

1. Возможно все. Насколько это просто и как вы должны это делать, во многом зависит от того, как вы создаете свое приложение. Вы используете фреймворк? Любой вид внедрения зависимостей? Более конкретно, можете ли вы объяснить, как настраиваются и создаются ваши объекты BasicDataSource? Что такое управление пулом подключений?

2. Я обновил вопрос с помощью кода, используемого для создания источника данных

3. просто создайте метод kerberosLogin() и вызовите его перед строкой datasource.getConnection() или внутри вашего метода DataSource(). Я не знаю, понимаю ли я проблему, которую ты …. Хм ..?

4. Вы правильно поняли, Аран, в настоящее время я тоже делаю то же самое. т.Е. вызываю kerberos login перед выполнением любого запроса в каждой функции. Я не получаю соединение вручную, вызывая метод getConnection(), поскольку я использую BasicDataSource с Spring JdbcTemplate, поэтому пул соединений не управляется мной. Я хочу каким-то образом вызвать этот метод входа в kerberos при создании соединения в пуле соединений

5. итак, если я правильно понимаю, вы можете изменить метод создания базы данных (опубликованный вами код), но не создание соединения, верно (getConnection выходит за ваши рамки)?