2015-05-08 20 views
15

Tôi có một ứng dụng Khởi động đơn giản kết nối với cơ sở dữ liệu PostgreSQL và phục vụ như một dịch vụ JSON. Bằng cách nào đó, quá trình khởi động đã trở nên rất chậm, hãy xem thời gian 10:37:10 và 10:38:00:Khởi động ứng dụng Khởi động khởi động rất chậm

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 

Bất kỳ suy nghĩ nào? Tôi có thể làm gì để chẩn đoán vấn đề không?

+0

tôi cũng gặp sự cố ngay cả khi cơ sở dữ liệu trên máy của tôi! Tôi nhận thấy rằng nó phụ thuộc vào mạng máy của tôi được kết nối với. Ở nhà không có vấn đề, tất cả đều nhanh. Nếu tôi đang ở nơi làm việc, với một proxy và tường lửa ở khắp mọi nơi, khởi động bị treo trước khi độ phân giải Dialect ... Có lẽ Hibernate cố gắng địa chỉ sai .... Dù sao giải pháp, dưới đây giải quyết vấn đề trong mọi trường hợp. –

Trả lời

0

Bạn có đang chạy thử nghiệm trên máy chủ cục bộ không? Có thể có một số vấn đề với URL máy chủ cơ sở dữ liệu, chẳng hạn như tên máy chủ không thể phân giải hoặc mục nhập DNS IPv6, kết nối với cùng một chuỗi kết nối từ một ứng dụng khác (ví dụ: http://squirrel-sql.sourceforge.net/) có thể xác nhận sự cố.

Độ trễ chắc chắn được ghi lại khi tạo kết nối cơ sở dữ liệu lần đầu tiên (trong khi đang tải trình điều khiển hoặc thực hiện kết nối).

+0

Máy chủ ở xa, nhưng chỉ mất vài giây để kết nối bằng pgAdmin. Và trình điều khiển dường như được tải trước khi sự cố xảy ra (tôi đã thêm một chút ghi nhật ký). – user3170702

0

Tôi thấy khởi động mất nhiều thời gian khi máy chủ db ở xa, trong trường hợp của tôi sẽ không mất thời gian khi sử dụng db localhost và mất khoảng 20 giây trong môi trường sản phẩm với db là trong chúng tôi và máy chủ trong jp.

5

Giải quyết vấn đề sử dụng

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

Cảm ơn tất cả.

27

Đối với mùa xuân Boot bạn có thể thiết lập này trong application.properties tập tin của bạn:

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

Tôi cũng thấy rằng tôi cần thiết để thiết lập thuộc tính khác hoặc tôi sẽ nhận được lỗi "org.hibernate.HibernateException: Truy cập vào DialectResolutionInfo không thể rỗng khi 'hibernate.dialect' không được thiết lập ". Để khắc phục điều đó tôi đặt khách sạn này:

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

này giảm thời gian khởi động của chúng tôi từ khoảng 100 giây xuống còn 12.

+2

Trên MacOS 10+ bạn có thể thực hiện trên Terminal 'scutil --set HostName" localhost "'. Tôi nghĩ là một vấn đề giải quyết các máy chủ mạng. –

+0

Điều này đã giúp một phần của vấn đề. Bây giờ cái gì khác với HibernateSessionFactory dường như gây ra một sự chậm lại. –

+1

@ThiagoPereira bạn đã lưu ngày của tôi ;-) –

1

Góp application.yml phiên bản của thiết lập bất động sản.

spring: 
    jpa: 
    properties: 
     hibernate: 
     temp: 
      use_jdbc_metadata_defaults: false 
Các vấn đề liên quan