5 votes

Hibernate est lent au démarrage avec Running schema validator

J'utilise Spring-Boot avec JPA et une base de données Postgres. En fonction de mon environnement réseau, la phase de démarrage est bloquée pendant plus de 15 secondes sur :

INFO  o.h.tool.hbm2ddl.SchemaValidator - HHH000229: Running schema validator

Ce qui est étrange, c'est que ma base de données est locale. Une idée ?

    spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
    spring.jpa.hibernate.ddl-auto= validate
    spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
    spring.datasource.driverClassName=org.postgresql.Driver
    spring.datasource.url=jdbc:postgresql://localhost:5432/cine

3voto

Glenn Bech Points 2009

Le validateur de schéma est tout simplement lent. Nous avons fini par ajouter cette ligne à notre fichier de configuration Spring pour notre profil d'environnement "dev" (application-dev.properties)

spring.jpa.hibernate.ddl-auto=none

C'est un peu risqué, car la cohérence entre la base de données et les entités JPA n'est pas vérifiée. Mais nous disposons d'environnements de test et d'assurance qualité qui pourraient détecter tout problème.

Cette correction a permis de réduire le processus de démarrage d'environ 20 secondes.

0voto

PaulNUK Points 1895

En cas de problème de ce type, procurez-vous un profileur (Yourkit est excellent) et profilez votre application au démarrage pour voir ce qui prend du temps. Yourkit vous montrera non seulement les points chauds (les méthodes qui prennent un temps disproportionné), mais aussi les requêtes de base de données et le temps qu'elles prennent.

Assurez-vous de démarrer le profilage en mode trace complète (ceci peut être configuré dans votre IDE, par exemple dans IntelliJ sur l'onglet startup de votre configuration d'exécution).

0voto

Yazan Points 2747

J'ai eu le même problème avec JPA (Eclipselink) et une base de données Mysql. Lorsque je démarre l'application, il faut environ 1 minute pour créer 4 tables simples et vides.

Je voyais des logs comme :

create table if not exist ... then it says error table already exist.

chaque enregistrement de ce qui précède a pris environ 15 secondes.

Cependant, après avoir fait des recherches, quelqu'un a suggéré d'utiliser le dernier Mysql connector Driver (Jar file), ce que j'ai fait et cela fonctionne bien maintenant.

Essayez donc d'utiliser un fichier jar de connecteur différent ou plus récent, dans votre cas pour postgresql ce serait aquí

0voto

Uncharted Works Points 56

Vérifiez votre application.yml.

  jpa:
database: MYSQL
show-sql: true
hibernate:
  ddl-auto : none

si la valeur de ddl-auto est update, veuillez la remplacer par none, cela devrait être beaucoup plus rapide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X