PostgreSQLデータベースに接続し、JSONサービスとして機能する簡単なSpring Bootアプリケーションがあります。どういうわけか、起動が非常に遅くなっています。10:37:10および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
何かご意見は?問題を診断するためにできることはありますか?
Spring Bootの場合、application.propertiesファイルでこれを設定できます。
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
また、別のプロパティを設定する必要があることもわかりました。そうしないと、「org.hibernate.HibernateException: 'hibernate.dialect'が設定されていない場合、DialectResolutionInfoへのアクセスはnullにできません」というエラーが表示されます。このプロパティを設定したことを修正するには:
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
これにより、起動時間が約100秒から12秒に短縮されました。
使用して解決した問題
properties.setProperty("hibernate.temp.use_jdbc_metadata_defaults", "false");
皆さんありがとう。
開発環境では、次のプロパティを使用します
spring.jpa.hibernate.ddl-auto=none
これは、ステージング環境と製品環境にとって少し危険です。
ローカルサーバーでテストを実行していますか?解決できないホスト名やIPv6 DNSエントリなど、データベースサーバーURLに問題があり、別のアプリケーションからの同じ接続文字列で接続している可能性があります(例 http://squirrel-sql.sourceforge.net/ )問題を確認できました。
遅延は、データベース接続を初めて作成するとき(ドライバーのロード中または接続の実行中)に必ず記録されます。
Dbサーバーが遠い場合、起動に長い時間がかかります。私の場合、localhost dbを使用する場合は時間がかかりません。また、dbが製品環境で約20秒かかり、dbがusにあり、serverがjpにあります。