JPA / Hibernate在创建EntityManagerFactory期间挂起生产

时间:2017-04-25 10:59:51

标签: java mysql hibernate jpa

我们有一个奇怪的问题。从几天开始,EntityManagerFactory的创建需要从几秒到几分钟(甚至30分钟甚至更长时间)随机创建。

这是TRACE日志的一部分:

12:36:49.281 [main] INFO  [org.hibernate.Version               ] - HHH000412: Hibernate Core {5.2.10.Final}
12:36:49.288 [main] INFO  [org.hibernate.cfg.Environment       ] - HHH000206: hibernate.properties not found
12:36:49.295 [main] DEBUG [hibernate.service.spi.ServiceBinding] - Overriding existing service binding [org.hibernate.secure.spi.JaccService]
12:36:49.305 [main] TRACE [internal.AbstractServiceRegistryImpl] - Initializing service [role=org.hibernate.engine.config.spi.ConfigurationService]
12:36:49.309 [main] TRACE [internal.AbstractServiceRegistryImpl] - Initializing service [role=org.hibernate.cache.spi.RegionFactory]
12:36:49.310 [main] DEBUG [ache.internal.RegionFactoryInitiator] - Cache region factory : org.hibernate.cache.internal.NoCachingRegionFactory
12:36:49.316 [main] INFO  [hibernate.annotations.common.Version] - HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
12:36:49.319 [main] TRACE [internal.AbstractServiceRegistryImpl] - Initializing service [role=org.hibernate.boot.cfgxml.spi.CfgXmlAccessService]

//HERE IT SIMPLY HANGS

可能是什么原因?我在DB上有双重检查锁,但没有。

POM:

<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

${hibernate.version}5.2.10.Final使用MySQL 5.6.17。

的persistence.xml

  <properties>
          <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
          <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/ourdbname?useSSL=false"/>
          <property name="javax.persistence.jdbc.user" value="ouruser" />
          <property name="javax.persistence.jdbc.password" value="ourpassword" />
          <property name="hibernate.connection.verifyServerCertificate" value="false" />
          <property name="hibernate.connection.requireSSL" value="false"/>
          <property name="hibernate.hbm2ddl.auto" value="validate"/>
          <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
          <property name="hibernate.connection.characterEncoding" value="utf-8"/>
          <property name="hibernate.connection.useUnicode" value="true" />
          <property name="hibernate.connection.charSet" value="UTF-8"/>
          <property name="hibernate.show_sql" value="false"/>
          <property name="hibernate.connection.pool_size" value="10"/>
          <property name="hibernate.bytecode.use_reflection_optimizer" value="false"/>
          <property name="hibernate.c3p0.validate" value="true"/>
          <property name="hibernate.connection.provider_class" value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider"/>
          <property name="hibernate.c3p0.min_size" value="4"/>
          <property name="hibernate.c3p0.max_size" value="10"/>
          <property name="hibernate.c3p0.timeout" value="1800"/>
          <property name="hibernate.c3p0.max_statements" value="0"/>
          <property name="hibernate.c3p0.idle_test_period" value="200"/>
          <property name="hibernate.c3p0.preferredTestQuery" value="SELECT 1;"/>
  </properties>

我们无法将任何应用程序更改连接到此类行为的beginnig,因为DB模式和模型没有更改。

创建EMF

EntityManagerFactory factory=javax.persistence.Persistence.createEntityManagerFactory(puName);

编辑:

线程转储显示该进程在本机文件系统调用上挂起。对此有何解决方法?

"main" #1 prio=5 os_prio=0 tid=0x00000000010c9000 nid=0x2c73 runnable [0x00007f4c928f5000]
   java.lang.Thread.State: RUNNABLE
    at java.io.UnixFileSystem.list(Native Method)
    at java.io.File.list(File.java:1122)
    at java.io.File.listFiles(File.java:1207)
    at org.hibernate.boot.archive.internal.ExplodedArchiveDescriptor.processDirectory(ExplodedArchiveDescriptor.java:105)
    at org.hibernate.boot.archive.internal.ExplodedArchiveDescriptor.processDirectory(ExplodedArchiveDescriptor.java:118)
    at org.hibernate.boot.archive.internal.ExplodedArchiveDescriptor.visitArchive(ExplodedArchiveDescriptor.java:54)
    at org.hibernate.boot.archive.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:47)
    at org.hibernate.boot.model.process.internal.ScanningCoordinator.coordinateScan(ScanningCoordinator.java:75)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.prepare(MetadataBuildingProcess.java:98)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:227)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:169)
    at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:36)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:181)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:129)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:71)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:52)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)

0 个答案:

没有答案