web-dev-qa-db-fra.com

HikariPool-1 - jdbcUrl est requis avec driverClassName

Je suis retourné à la programmation de mon ancien programme https://github.com/JonkiPro/REST-Web-Services . J'ai mis à jour Spring Boot de la version 15.6 à la version 2.0.0. J'ai rencontré beaucoup de problèmes avec la compilation, mais je ne peux pas en traiter un. Pendant la compilation, il me jette dans la console

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

Je n'ai jamais eu une telle erreur. Je ne sais pas ce que cela signifie complètement. Mes propriétés pour la base ressemblent à ceci

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

Je ne sais pas comment traiter cette erreur. J'ai programmé assez longtemps, mais pour la première fois, je rencontre le concept de hikari. J'utilise un serveur Tomcat (dans Spring Boot) et une base de données PostgreSQL.

13
rytyrtytr

J'ai eu le même problème dans un autre contexte. À partir de 79. Accès aux données - Configurer une source de données personnalisée

si vous avez Hikari sur le chemin de classe, cette configuration de base ne fonctionne pas, car Hikari n'a pas de propriété url (mais a une propriété jdbcUrl)

Hikari est le pool par défaut dans Spring Boot 2.

afin que vous puissiez remplacer la config url: jdbc:postgresql:database -> jdbc-url: jdbc:postgresql:database

ou vous pouvez conserver la configuration mais vous devez définir un autre bean pour gérer le mappage (alias)

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

@Bean
@ConfigurationProperties("app.datasource")
public DataSource dataSource(DataSourceProperties properties) {
    return properties.initializeDataSourceBuilder().
        .build();
}
16
Maurizio Lo Bosco

Soit supprimer spring.datasource.driver-class-name propriété ou renommer la spring.datasource.url propriété à spring.datasource.jdbc-url.

Ceci est rapporté dans votre erreur:

Java.lang.IllegalArgumentException: jdbcUrl est requis avec driverClassName

La première option semble plus propre et Spring Boot déterminera le nom de la classe de pilote par défaut en fonction du spring.datasource.url valeur de la propriété (voir org.springframework.boot.jdbc.DatabaseDriver classe si vous voulez résoudre ce problème).

11
Karol Dowbecki