web-dev-qa-db-fra.com

Démarrage très lent de l'application Spring Boot

J'ai une simple application Spring Boot qui se connecte à une base de données PostgreSQL et sert de service JSON. D'une manière ou d'une autre, le démarrage est devenu très lent, consultez les horaires 10:37:10 et 10:38:00:

2015-05-09 10:37:09.649  INFO 20880 --- [lication.main()] o.Apache.catalina.core.StandardService   : Starting service Tomcat
2015-05-09 10:37:09.651  INFO 20880 --- [lication.main()] org.Apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.20
2015-05-09 10:37:09.767  INFO 20880 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2015-05-09 10:37:09.767  INFO 20880 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2970 ms
2015-05-09 10:37:09.979  INFO 20880 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2015-05-09 10:37:09.985  INFO 20880 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
2015-05-09 10:37:10.105  INFO 20880 --- [lication.main()] o.s.j.d.DriverManagerDataSource          : Loaded JDBC driver: org.postgresql.Driver
2015-05-09 10:37:10.214  INFO 20880 --- [lication.main()] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2015-05-09 10:37:10.233  INFO 20880 --- [lication.main()] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]
2015-05-09 10:37:10.585  INFO 20880 --- [lication.main()] org.hibernate.Version                    : HHH000412: Hibernate Core {4.3.8.Final}
2015-05-09 10:37:10.587  INFO 20880 --- [lication.main()] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2015-05-09 10:37:10.589  INFO 20880 --- [lication.main()] org.hibernate.cfg.Environment            : HHH000021: Bytecode provider name : javassist
2015-05-09 10:37:10.968  INFO 20880 --- [lication.main()] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
2015-05-09 10:38:00.023  INFO 20880 --- [lication.main()] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
2015-05-09 10:38:00.041  INFO 20880 --- [lication.main()] o.h.e.jdbc.internal.LobCreatorBuilder    : HHH000424: Disabling contextual LOB creation as createClob() method threw error : Java.lang.reflect.InvocationTargetException
2015-05-09 10:38:00.274  INFO 20880 --- [lication.main()] o.h.h.i.ast.ASTQueryTranslatorFactory    : HHH000397: Using ASTQueryTranslatorFactory

Des pensées? Est-ce que je peux faire quelque chose pour diagnostiquer le problème?

23
user3170702

Pour Spring Boot, vous pouvez définir ceci dans votre fichier application.properties:

spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false

J'ai également constaté que j'avais besoin de définir une autre propriété ou j'obtiendrais l'erreur "org.hibernate.HibernateException: l'accès à DialectResolutionInfo ne peut pas être null lorsque l'option" hibernate.dialect "n'est pas définie". Pour rectifier que j'ai défini cette propriété:

spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect

Cela a réduit notre temps de démarrage d'environ 100 secondes à 12.

40
Rob Baily

Problème résolu en utilisant

properties.setProperty("hibernate.temp.use_jdbc_metadata_defaults", "false");

Merci a tous.

7
user3170702

Version contributive application.yml du paramètre de propriété.

spring:
  jpa:
    properties:
      hibernate:
        temp:
          use_jdbc_metadata_defaults: false
3
CAPS LOCK

J'ai constaté que le démarrage prend beaucoup de temps lorsque le serveur de base de données est loin. Dans mon cas, l'utilisation de la base de données localhost ne prend pas de temps et prend environ 20 secondes dans l'environnement du produit avec la base de données est en nous et le serveur est en format jp.

0
NGloom

Pour l'environnement dev, utilisez la propriété suivante

spring.jpa.hibernate.ddl-auto=none

Ce serait un peu risqué pour l'environnement de transfert et de production.

0
KayV