某次在內(nèi)網(wǎng)(無互聯(lián)網(wǎng)訪問)啦鸣,centos7.3 tomcat7部署boot war包是發(fā)現(xiàn)钱贯,應(yīng)用每次卡在:[ restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect,時(shí)長(zhǎng)達(dá)10多分鐘磕秤,使用idea啟動(dòng)boot內(nèi)嵌tomcat啟動(dòng)時(shí)打印如下:
2018-11-27 10:58:39.542 INFO 10488 --- [ restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
2018-11-27 10:58:47.689? INFO 10488 --- [? restartedMain] o.h.e.j.e.i.LobCreatorBuilderImpl? ? ? ? : HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
研究發(fā)現(xiàn),boot-start包內(nèi)部嵌套了hibernate,Hibernate默認(rèn)是使用jdbc方式來取的缭裆,而工程使用的是mybatis+druid方式,jdbc自然獲取不到連接寿烟;通過在application.properties配置:spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false即可跳過jdbc hibernate連接澈驼,測(cè)試驗(yàn)證后再linux環(huán)境下啟動(dòng)無卡頓;
boot簡(jiǎn)單靈活性建立在封裝了多種常用組件基礎(chǔ)之上筛武,例如hibernate jpa核心服務(wù)缝其,該問題切入點(diǎn)可以查看
package org.hibernate.engine.jdbc.env.internal;
...
public class JdbcEnvironmentInitiator implements StandardServiceInitiator<JdbcEnvironment> {
@Override
public JdbcEnvironment initiateService(Map configurationValues, ServiceRegistryImplementor registry) {
? final DialectFactory dialectFactory = registry.getService( DialectFactory.class );
? // 'hibernate.temp.use_jdbc_metadata_defaults' is a temporary magic value.
// The need for it is intended to be alleviated with future development, thus it is
// not defined as an Environment constant...
//
// it is used to control whether we should consult the JDBC metadata to determine
// certain Settings default values; it is useful to *not* do this when the database
// may not be available (mainly in tools usage).
? boolean useJdbcMetadata = ConfigurationHelper.getBoolean(
? ? ? ? "hibernate.temp.use_jdbc_metadata_defaults",
? ? ? ? configurationValues,
true
? );
...
相關(guān)調(diào)用鏈分析可以提供IDE分析即可;
也可以通過springboot刪除hibernate服務(wù):
<dependency>
? <groupId>org.springframework.boot</groupId>
? <artifactId>spring-boot-starter-data-jpa</artifactId>
? <!--排除Hibernate相關(guān)依賴-->
? <exclusions>
? ? <exclusion>
? ? ? <groupId>org.hibernate</groupId>
? ? ? <artifactId>hibernate-core</artifactId>
? ? </exclusion>
? ? <exclusion>
? ? ? <groupId>org.hibernate</groupId>
? ? ? <artifactId>hibernate-entitymanager</artifactId>
? ? </exclusion>
? </exclusions>
</dependency>