java – 如何从Hibernate中禁用SHOW WARNINGS?
作者:互联网
使用Hibernate(4.3.8)和MySQL,我注意到一堆SHOW WARNINGS语句在活动日志中占用了相当大的带宽:
我搜索了一下,这是一个非常普遍的问题(for example),显然可以在increasing the log level to ERROR解决(而且解决方案是confirmed implemented,因为至少4.3.6).
问题是,我实际上并不知道如何做到这一点.我对Hibernate的了解是使用Hibernate所必需的最低限度.之前链接的帖子通过编辑logback.xml中的Logback设置解决了它,但我没有使用Logback.我正在使用所有默认设置:
>显然它以JBoss Logging为核心.
>我的类路径中没有任何其他日志记录依赖项(例如slf4j.jar),所以我绝对不会使用它们.日志消息正在写入System.err.
所以我真的不知道该怎么做.这是我的配置文件:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/xxxxx</property>
<property name="connection.username">xxxxx</property>
<property name="connection.password">xxxxx</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.isolation">2</property>
<property name="connection.pool_size">10</property>
<property name="current_session_context_class">thread</property>
<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- <property name="show_sql">true</property> -->
<!-- <property name="hbm2ddl.auto">create</property> -->
<mapping resource="hibernate.hbm.xml"/>
</session-factory>
</hibernate-configuration>
以下是构建路径中的依赖项;有Jettison和Joda,MySQL驱动程序,然后是Hibernate所需的依赖目录和其他内容:
07005
如何在此(默认设置)情况下增加日志级别或以其他方式禁用SHOW WARNINGS? This提到了“感兴趣的日志类别”,但我不确定它们与配置文件的关系. This page没有在“Logging”部分之外记录任何与日志相关的属性,它提到了SLF4J,但显然我没有使用SLF4J(我怎么可能,因为它不在我的类路径中).
解决方法:
默认情况下,hibernate框架启用MySQL的SHOW WARNING,每次查询都会触发,这会使MySQL的查询数量翻倍,应用程序可以实现性能问题.可以通过以下方式在hibernate中进一步记录SHOW WARNING:
org.hibernate.engine.jdbc.spi.SqlExceptionHelper#handleAndClearWarnings()
解
让休眠选择合适的记录器.这可以通过添加:
-Dorg.jboss.logging.provider = slf4j或-Dorg.jboss.logging.provider = log4j作为JVM运行时参数.
对于slf4j logger,您需要配置logback.xml文件.添加这个:
<logger name="org.hibernate.type" level="ERROR" />
对于log4j logger,您需要将以下行添加到log4j.properties:
log4j.logger.org.hibernate.type=ERROR
标签:java,mysql,hibernate,hibernate-4-x 来源: https://codeday.me/bug/20190701/1350076.html