2015-05-08 29 views
15

Ho una semplice applicazione Spring Boot che si collega a un database PostgreSQL e funge da servizio JSON. In qualche modo l'avvio è diventato molto lento, vedere temporizzazioni 10:37:10 e 10:38:00:avvio molto lento dell'applicazione di avvio Spring

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 

Qualche idea? C'è qualcosa che posso fare per diagnosticare il problema?

+0

ho anche il problema anche se il database sulla mia macchina! Ho notato che dipende dalla rete alla quale è connessa la mia macchina. A casa nessun problema, tutto è veloce. Se sono al lavoro, con proxy e firewall ovunque, l'avvio si blocca prima della risoluzione di Dialect ... Forse Hibernate tenta indirizzi errati ... Comunque la soluzione, qui sotto, risolve il problema in tutti i casi. –

risposta

0

Stai eseguendo i test su un server locale? Forse c'è qualche problema con l'URL del server database, come un nome host non risolvibile o una voce DNS IPv6, che si connette con la stessa stringa di connessione da un'altra applicazione (ad esempio http://squirrel-sql.sourceforge.net/) potrebbe confermare il problema.

Il ritardo viene definitivamente registrato quando si crea la connessione al database per la prima volta (durante il caricamento del driver o l'esecuzione della connessione).

+0

Il server è remoto, ma ci vogliono solo pochi secondi per connettersi usando pgAdmin. E il driver sembra essere caricato prima che il problema si verifichi (ho aggiunto un po 'più di logging). – user3170702

0

Ho trovato che l'avvio richiede molto tempo quando il server db è lontano, nel mio caso non ci vorrà del tempo quando si utilizza il db localhost, e ci vogliono circa 20 secondi nell'ambiente del prodotto con db è in noi e il server è in jp.

5

Problema risolto utilizzando

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

Grazie tutti.

27

Per la Primavera di avvio è possibile impostare questo nel file application.properties:

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

Ho anche scoperto che avevo bisogno di impostare un'altra proprietà o avrei ricevuto l'org.hibernate.HibernateException errore": Accesso al DialectResolutionInfo non può essere nullo quando 'hibernate.dialect' non è impostato ". Per rettificare che ho impostato questa proprietà:

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

Ciò ha ridotto il nostro tempo di avvio da circa 100 secondi fino a 12.

+2

Su MacOS 10+ è possibile eseguire su Terminale 'scutil --set HostName" localhost "'. Penso che sia un problema risolvere l'host di rete. –

+0

Questo ha aiutato con parte del problema. Ora qualcos'altro con HibernateSessionFactory sembra causare un rallentamento. –

+1

@ThiagoPereira hai salvato la mia giornata ;-) –

1

Contribuire application.yml versione di impostazione della proprietà.

spring: 
    jpa: 
    properties: 
     hibernate: 
     temp: 
      use_jdbc_metadata_defaults: false