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?
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.
Problème résolu en utilisant
properties.setProperty("hibernate.temp.use_jdbc_metadata_defaults", "false");
Merci a tous.
Version contributive application.yml
du paramètre de propriété.
spring:
jpa:
properties:
hibernate:
temp:
use_jdbc_metadata_defaults: false
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.
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.