HikariPool-1 - driverClassName 需要 jdbcUrl

Posted

技术标签:

【中文标题】HikariPool-1 - driverClassName 需要 jdbcUrl【英文标题】:HikariPool-1 - jdbcUrl is required with driverClassName 【发布时间】:2018-08-27 09:54:48 【问题描述】:

我又开始编写我的旧程序https://github.com/JonkiPro/REST-Web-Services。我已将 Spring Boot 从 15.6 版更新到 2.0.0 版。我在编译时遇到了很多问题,但我无法处理一个。好吧,在编译过程中,他把我扔进了控制台

2018-03-18 21:54:53.339 ERROR 3220 --- [ost-startStop-1] com.zaxxer.hikari.HikariConfig           : HikariPool-1 - jdbcUrl is required with driverClassName.
2018-03-18 21:54:55.392  INFO 3220 --- [ost-startStop-1] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'unit'
2018-03-18 21:54:56.698  INFO 3220 --- [ost-startStop-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'unit'
2018-03-18 21:54:56.778 ERROR 3220 --- [ost-startStop-1] com.zaxxer.hikari.HikariConfig           : HikariPool-1 - jdbcUrl is required with driverClassName.
2018-03-18 21:54:56.782 ERROR 3220 --- [ost-startStop-1] o.s.b.web.embedded.tomcat.TomcatStarter  : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'webSecurityConfig': Unsatisfied dependency expressed through field 'userDetailsService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userDetailsService' defined in file [C:\Users\Jonatan\Documents\GitHub\REST-Web-Services\web\out\production\classes\com\web\web\security\service\impl\UserDetailsServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Cannot create inner bean '(inner bean)#65d6e77b' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#65d6e77b': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory': Post-processing of FactoryBean's singleton object failed; nested exception is java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.
2018-03-18 21:54:56.821  WARN 3220 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat

我从来没有犯过这样的错误。我完全不知道这意味着什么。我的基地属性如下所示

spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql:database
    username: root
    password: root
    schema: classpath:/db/init/schema.sql

我不知道如何处理这个错误。我已经编程了很长时间,但是我第一次遇到hikari 的概念。我正在使用 Tomcat(在 Spring Boot 中)服务器和 PostgreSQL 数据库。

【问题讨论】:

你的网址不应该看起来像 jdbc:postgresql://host:5432/db 没有。 jdbc.postgresql.org/documentation/80/connect.html另外,在Spring Boot版本改变之前就可以了。 好的。一种可能性是没有选择配置变量。 这不是程序的当前版本,但非常相似github.com/JonkiPro/REST-Web-Services/blob/master/web/src/main/…。我只有数据库的这个配置。我可以以某种方式配置这些 Hikari 吗?我从来没有听说过。 只需删除driver-class-name 属性。 Spring Boot 将仅从 URL 确定驱动程序类。 【参考方案1】:

我在另一个上下文中遇到了同样的问题。 来自79. Data Access - Configure a Custom DataSource

如果您碰巧在类路径中有 Hikari,则此基本设置不起作用,因为 Hikari 没有 url 属性(但有 jdbcUrl 属性)

Hikari 是 Spring Boot 2 中的默认池。

所以你可以替换配置 url: jdbc:postgresql:database -> jdbc-url: jdbc:postgresql:database

或者您可以保留配置,但您需要定义另一个 Bean 来处理映射(别名)

@Bean
@Primary
@ConfigurationProperties("app.datasource")
public DataSourceProperties dataSourceProperties() 
    return new DataSourceProperties();


@Bean
@ConfigurationProperties("app.datasource")
public DataSource dataSource(DataSourceProperties properties) 
    return properties.initializeDataSourceBuilder().
        .build();

【讨论】:

为我解决了这个问题,我有 2 个数据源,在我的属性中我只是将 app.datasource1.url 替换为 app.datasource1.jdbc-url 您也可以在这里查看创建数据源的不同方法:baeldung.com/hikaricp#1-creating-a-datasource【参考方案2】:

删除spring.datasource.driver-class-name 属性或将spring.datasource.url 属性重命名为spring.datasource.jdbc-url

这是在您的错误中报告的:

java.lang.IllegalArgumentException: jdbcUrl 是 driverClassName 所必需的

第一个选项看起来更简洁,Spring Boot 将根据 spring.datasource.url 属性值找出默认的驱动程序类名称(如果要调试,请参阅 org.springframework.boot.jdbc.DatabaseDriver 类)。

【讨论】:

以上是关于HikariPool-1 - driverClassName 需要 jdbcUrl的主要内容,如果未能解决你的问题,请参考以下文章

com.zx.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. 报错问题

ERROR com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Exception during pool initialization.

Java 异常 java.sql.SQLException: HikariDataSource HikariDataSource (HikariPool-1) 已关闭

HikariPool-1 - 连接不可用,对于非常小的负载服务器,请求在 30000 毫秒后超时

HikariPool-1 - 无法验证连接 org.postgresql.jdbc.PgConnection@2a84e649(此连接已关闭。)

MariaDB-Access 失败:错误 com.zaxxer.hikari.HikariConfig - HikariPool-1 - dataSource or dataSourceClassNa