2015-05-08 16 views
15

Mam prostą aplikację Spring Boot, która łączy się z bazą danych PostgreSQL i służy jako usługa JSON. W jakiś sposób uruchomienie stało się bardzo powolne, zobacz czasy 10:37:10 i 10:38:00:bardzo powolne uruchamianie aplikacji rozruchowej

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 

Jakieś myśli? Czy jest coś, co mogę zrobić, aby zdiagnozować problem?

+0

Mam również problem, nawet jeśli baza danych znajduje się na moim komputerze! Zauważyłem, że to zależy od sieci, do której jest podłączony mój komputer. W domu nie ma problemu, wszystko jest szybkie. Jeśli jestem w pracy, z proxy i zaporą na całym świecie, startup zawiesza się przed rozwiązaniem Dialect ... Może Hibernate próbuje błędnie adresować .... W każdym razie rozwiązanie, poniżej rozwiązuje problem we wszystkich przypadkach. –

Odpowiedz

0

Czy przeprowadzasz testy na lokalnym serwerze? Być może wystąpił problem z adresem URL serwera bazy danych, na przykład nierozpoznawalna nazwa hosta lub wpis DNS IPv6, połączenie z tym samym ciągiem połączenia z innej aplikacji (np. http://squirrel-sql.sourceforge.net/) może potwierdzić problem.

Opóźnienie jest zdecydowanie rejestrowane podczas tworzenia połączenia z bazą danych po raz pierwszy (podczas ładowania sterownika lub wykonywania połączenia).

+0

Serwer jest zdalny, ale połączenie z użyciem pgAdmin zajmuje tylko kilka sekund. I wydaje się, że sterownik został załadowany zanim wystąpi problem (dodałem nieco więcej rejestrowania). – user3170702

0

Zauważyłem, że uruchomienie trwa długo, gdy serwer bazy danych jest daleko, w moim przypadku nie będzie to wymagało czasu, gdy korzystam z db lokalnego hosta, i zajmie około 20 sekund w środowisku produktu z db jest w nas i serwer jest w jp.

5

Problem rozwiązany za pomocą

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

Dzięki wszystkim.

27

na wiosnę Boot można ustawić to w pliku application.properties:

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

Znalazłam też, że muszę ustawić inną nieruchomość lub chciałbym uzyskać błędzie „org.hibernate.HibernateException: dostęp do DialectResolutionInfo nie może mieć wartości null, gdy "hibernate.dialect" nie jest ustawione ". Aby skorygować że mogę ustawić tę właściwość:

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

Ta zmniejszona nasz czas startowy od około 100 sekund w dół do 12.

+2

Na MacOS 10+ możesz wykonać na Terminal 'scutil --set HostName" localhost "'. Myślę, że to problem rozwiązujący hosta sieciowego. –

+0

Pomogło to w części problemu. Teraz coś innego z HibernateSessionFactory wydaje się powodować spowolnienie. –

+1

@ThiagoPereira uratowałeś mój dzień ;-) –

1

Współpracujący application.yml wersję otoczeniu nieruchomości.

spring: 
    jpa: 
    properties: 
     hibernate: 
     temp: 
      use_jdbc_metadata_defaults: false 
Powiązane problemy