编程语言
首页 > 编程语言> > java-使用JPA休眠,连接时间很慢

java-使用JPA休眠,连接时间很慢

作者:互联网

我有一个项目,我想使用Hibernate进行数据库访问.在应用程序中,使用了JPA api.

persistence.xml文件是这个

<persistence 
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
    <persistence-unit name="hibernate.test"
        transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <properties>
            <property name="hibernate.ejb.cfgfile" value="/hibernate/hibernate.cfg.xml"/>
        </properties>
    </persistence-unit>
</persistence>

hibernate.cfg.xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory>
  <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
  <property name="hibernate.connection.password">password</property>
  <property name="hibernate.connection.url">jdbc:oracle:thin:@//server:1521/DBNAME</property>
  <property name="hibernate.connection.username">username</property>
  <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
  <!-- <property name="hibernate.hbm2ddl.auto">verify</property>  -->
  <property name="hibernate.default_catalog">SYS_SOMETHING</property>
  <property name="hibernate.default_schema">SYS_SOMETHING</property>
 </session-factory>
</hibernate-configuration>

这个设置的问题在于,entityManagerFactory = Persistence.createEntityManagerFactory(“ hibernate.test”);

通话大约需要25秒才能完成.

如果我将配置直接移到persistence.xml文件,则连接将在1秒内完成.
Oracle和MySQL数据库均发生错误.

我可以在日志文件中看到延迟,在此期间没有任何其他反应

525 [pool-2-thread-1] INFO org.hibernate.cfg.Environment  - HHH000021: Bytecode provider name : javassist
21668 [pool-2-thread-1] DEBUG org.hibernate.service.internal.JaxbProcessor  - cfg.xml document did not define namespaces; wrapping in custom event reader to introduce namespace information

完整日志:http://pastebin.com/4NjPpFPe

如果不使用cfg.xml,则此延迟仅约200ms.

在此期间,进程内存不会更改,根据sysinternals进程监视器,CPU使用率为0%,并且存在0个交互.

我想保留此设置,因为hibernate.cfg.xml也用于逆向工程和hibernate工具.

使用的工具:
Java8的
休眠-4.3.8
ojdbc7
jpa-2.1

感谢您提前提出任何建议.

更新:

找到了解决方案,现在我很快乐!

休眠框架(或xml解析器,我不确定)将在http请求上等待.

要解决此问题,请更换

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<!DOCTYPE hibernate-configuration SYSTEM "-//Hibernate/Hibernate Configuration DTD 3.0//EN">

解决方法:

找到了解决方案,现在我很快乐!

休眠框架(或xml解析器,我不确定)将在http请求上等待.

要解决此问题,请更换

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<!DOCTYPE hibernate-configuration SYSTEM "hibernate-configuration-3.0.dtd">

编辑:替换“带”行,这将在发布模式和反向工程中使用正确的dtd文件(在未指定实际文件的情况下无法使用reveng).

标签:persistence-xml,jpa,hibernate,hibernate-cfg-xml,java
来源: https://codeday.me/bug/20191120/2044274.html