У меня возникают проблемы с созданием приложения весенней загрузки, которое может динамически подключаться к нескольким базам данных, в зависимости от ввода пользователя. В основном приложение выполняет один и тот же sql-запрос в разных базах данных. моделируя мою попытку после это, я получил следующую ошибку:
2018-04-10 16:18:50.678 ERROR 15716 --- [ restartedMain] com.zaxxer.hikari.HikariConfig : HikariPool-1 - dataSource or dataSourceClassName or jdbcUrl is required.
-
Caused by: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.
класс конфигурации:
@Configuration
public class ReconDBConfig {
@ConfigurationProperties(prefix = "spring.datasource.foo")
@Bean
@Primary
public DataSource fooDataSource() {
return DataSourceBuilder
.create()
.build();
}
@ConfigurationProperties(prefix = "spring.datasource.bar")
@Bean
public DataSource barDataSource() {
return DataSourceBuilder
.create()
.build();
}
}
Файл свойств:
spring.datasource.foo.url = jdbc:postgresql://localhost:5432/fooDB
spring.datasource.foo.user = admin
spring.datasource.foo.password = admin
spring.datasource.foo.driver = org.postgresql.Driver
spring.datasource.foo.maxconn = 5
spring.datasource.foo.expiry = 180
spring.datasource.foo.cache = true
spring.datasource.foo.retry = 3
spring.datasource.foo.retrydelay = 30
spring.datasource.bar.url = jdbc:postgresql://not_localhost:5432/fooDB
spring.datasource.bar.user = definitely_not_admin
spring.datasource.bar.password = definitely_not_admin
spring.datasource.bar.driver = org.postgresql.Driver
spring.datasource.bar.maxconn = 5
spring.datasource.bar.expiry = 180
spring.datasource.bar.cache = true
spring.datasource.bar.retry = 3
spring.datasource.bar.retrydelay = 30
есть идеи о том, как я могу это сделать? Я, как вы можете сказать, еще не очень разбираюсь в этой конфигурации с несколькими базами данных.
каждый раз, ну, я только пытался построить проект менее 10 раз ... но каждый раз ..
Закомментируйте один из bean-компонентов и посмотрите, получите ли вы ту же ошибку. Имея два, исключение не сообщает вам, какой из них вызывает проблему.
что было сделано, та же ошибка. я уверен, что это как-то связано с «dataSource или dataSourceClassName или jdbcUrl требуется», но я не уверен, как добавить это в
Вы пробовали настроить его, как указано здесь?




DataSourceBuilder.create().build() будет создавать экземпляр HikariDataSource, поскольку он является источником данных по умолчанию, начиная с SpringBoot 2.0. Если вы посмотрите исходный код HikariDataSource, свойства: jdbcUrl, имя пользователя НЕ url, Пользователь. Итак, вам нужно изменить ключи свойств в файле application.properties следующим образом:
spring.datasource.foo.jdbcUrl=jdbc:postgresql://localhost:5432/fooDB
spring.datasource.foo.username=admin
...
...
spring.datasource.bar.jdbcUrl=jdbc:postgresql://not_localhost:5432/fooDB
spring.datasource.bar.username=definitely_not_admin
...
...
Чтобы использовать другой источник данных на основе некоторых параметров запроса, вам, возможно, придется использовать Spring AbstractRoutingDataSource, как описано здесь https://spring.io/blog/2007/01/23/dynamic-datasource-routing/.
Эта ошибка появляется при каждой попытке или сразу после успешного первого подключения?