【问题标题】:Unable to use HikariCP in Spring Boot 1.5.18 with multiple data source configuration多数据源配置的 Spring Boot 1.5.18 无法使用 HikariCP
【发布时间】:2019-01-10 10:29:21
【问题描述】:

我们在 Spring Boot 应用程序中使用了多个数据源配置。 两个数据源都只属于 mysql。

使用以下方式配置多个数据源:

https://medium.com/@joeclever/using-multiple-datasources-with-spring-boot-and-spring-data-6430b00c02e7

pom.xml 更改:

<!-- exclude tomcat jdbc connection pool, use HikariCP -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jdbc</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- exclude tomcat-jdbc, Spring Boot will use HikariCP automatically -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>

.properties****:

spring.db1.datasource.jdbcUrl=jdbc:mysql://localhost:3306/db1?zeroDateTimeBehavior=convertToNull
spring.db1.datasource.driverClassName=com.mysql.jdbc.Driver
spring.db1.datasource.username=root
spring.db1.datasource.password=

spring.db2.datasource.jdbcUrl=jdbc:mysql://localhost:3306/db2?zeroDateTimeBehavior=convertToNull
spring.db2.datasource.driverClassName=com.mysql.jdbc.Driver
spring.db2.datasource.username=root
spring.db2.datasource.password=

数据源 Bean 配置:

@Bean
@ConfigurationProperties(prefix = "spring.db1.datasource")
public DataSource db1DataSource() {
    return DataSourceBuilder.create().build();
}


@Bean
@ConfigurationProperties(prefix = "spring.db2.datasource")
public DataSource db2Source() {
    return DataSourceBuilder.create().build();
}

但是当我运行它时出现以下异常:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.JpaVendorAdapter]: Factory method 'jpaVendorAdapter' threw exception; nested exception is java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.

如何解决这个问题?

【问题讨论】:

  • 在属性文件中使用 url 而不是 jdbcUrl
  • @M.Deinum 同样的例外。原因:java.lang.IllegalArgumentException:驱动程序类名称需要 jdbcUrl。
  • 您的设置似乎没问题。你是在application.properties 中传递你的参数还是它是一个不同的文件名。另外我注意到你没有在 mysql 的 pom 中包含 db 驱动程序
  • 您应该使用前面提到的url,并尝试删除driverClassName 属性,因为这不是必需的(Spring Boot 将根据 URL 来计算)。您能否也添加完整的堆栈跟踪而不是 sn-p。
  • @M.Deinum 谢谢。删除了 driverClassName,它的工作

标签: spring-boot spring-data-jpa


【解决方案1】:

您的 pom 中缺少驱动程序依赖项

您需要在 pom.xml 中添加以下行以包含数据库驱动程序。

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

【讨论】: