Spring boot + hikari - dataSource or dataSourceClassName or jdbcUrl is required issue
Posted
技术标签:
【中文标题】Spring boot + hikari - dataSource or dataSourceClassName or jdbcUrl is required issue【英文标题】: 【发布时间】:2019-04-26 13:58:00 【问题描述】:我在尝试启动我的 Spring 应用程序时遇到以下错误
ERROR 5908 --- [ main] com.zaxxer.hikari.HikariConfig : HikariPool-1 - dataSource or dataSourceClassName or jdbcUrl is required.
我的application.properties
文件如下所示:
spring.datasource.one.jdbc-url = jdbc:postgresql://10.x.x.x:y/sampledb1
spring.datasource.one.username = someuser
spring.datasource.one.password = somepasswd
spring.datasource.one.driver-class-name = org.postgresql.Driver
spring.datasource.two.jdbc-url = jdbc:postgresql://10.x.x.x:z/sampledb2
spring.datasource.two.username = someuser
spring.datasource.two.password = somepassword
spring.datasource.two.driver-class-name = org.postgresql.Driver
我正在使用如下 DataSourceBuilder 类:
@Configuration
public class DataSourceConfig
@Bean(name = "one")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.one")
public DataSource dataSource1()
return DataSourceBuilder.create().build();
@Bean(name = "two")
@ConfigurationProperties(prefix = "spring.datasource.two")
public DataSource dataSource2()
return DataSourceBuilder.create().build();
我的 pom 看起来像这样。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<avro.version>1.8.2</avro.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<version.powermock>1.6.2</version.powermock>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>log4j-over-slf4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
</dependencies>
这之前工作正常,但现在引起了一些问题。并且错误发生intermittently
,有时它启动时没有错误,有时它会因错误而失败。
我尝试了link 中建议的解决方案。它们似乎不适合我。
【问题讨论】:
我尝试将您的代码与 H2 db 一起使用...它可以正常工作。 是的,它间歇性地工作。但有时它会失败。 @user2761431 你设法让它工作了吗?我也面临同样的问题。 【参考方案1】:将jdbc-url
更改为jdbcUrl
,以便Hikari 可以为每个网址找到合适的驱动程序。
jdbcUrl 该属性指示 HikariCP 使用“基于 DriverManager”的配置。我们认为基于 DataSource 的配置(上)由于各种原因(见下文)而优越,但对于许多部署而言几乎没有显着差异。当将此属性与“旧”驱动程序一起使用时,您可能还需要设置 driverClassName 属性,但请先尝试不设置。请注意,如果使用此属性,您仍然可以使用 DataSource 属性来配置您的驱动程序,实际上建议使用 URL 本身中指定的驱动程序参数。默认值:无
【讨论】:
【参考方案2】:当 spring 在错误的位置查找属性文件时,可能会发生此错误。例如,当 Java 选项 -Dspring.config.location=...
在启动时传递给您的应用程序服务器时,您部署的应用程序的属性文件将被忽略 - 即使在 spring.config.location
也没有属性文件。
【讨论】:
以上是关于Spring boot + hikari - dataSource or dataSourceClassName or jdbcUrl is required issue的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Spring Boot 中为 Hikari 设置 keepAlive Time 配置
Spring Boot JPA Repository 未释放 Hikari DB Connection
带有 mysql 的 Spring Boot 应用程序卡在“Hikari-Pool-1 - 正在启动...”
Spring boot + hikari - dataSource or dataSourceClassName or jdbcUrl is required issue