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.
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();
}
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).