我想在文件中记录SQL语句.
我有以下属性application.properties
spring.datasource.url=...
spring.datasource.username=user
spring.datasource.password=1234
spring.datasource.driver-class-name=net.sourceforge.jtds.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
security.ignored=true
security.basic.enabled=false
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=INFO
logging.file=c:/temp/my-log/app.log
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序
cmd>mvn spring-boot:run
Run Code Online (Sandbox Code Playgroud)
我可以在控制台中看到sql语句,但它们不会出现在app.log文件中.该文件仅包含spring的基本日志.
如何在日志文件中查看sql语句?
我目前正在开发一个使用Spring Boot和Spring Data(它的JpaRepository接口准确)和Hibernate的应用程序.
我喜欢Hiberante的一个方面是它的缓存功能 - 当你提交与特定对象匹配的多个查询时,你将在每次查询执行时返回该对象的相同实例(相对于Java的==运算符).但是,在使用Spring Data和JpaRepository类时,情况似乎并非总是如此.出于这个原因,我假设这里有多个HibernateSession实例在工作.
因此我的问题是:Spring Data如何处理Hibernate会话?什么时候打开或关闭它们?有没有办法将它配置为对我的应用程序的整个运行时使用相同的会话来充分利用Hibernate的对象缓存?有没有理由不这样做?
谢谢,
艾伦
该程序一个接一个地执行数万个连续插入.我以前从未使用过Hibernate.我的性能非常慢(如果我只是手动连接并执行SQL,我的速度要快10-12倍.根据许多hibernate教程,我的batch_size设置为50.
这是一个来自单个插入的日志 - 也许你可以帮我理解究竟发生了什么:
START INSERT
11:02:56.121 [main] DEBUG org.hibernate.impl.SessionImpl - opened session at timestamp: 13106053761
11:02:56.121 [main] DEBUG o.h.transaction.JDBCTransaction - begin
11:02:56.121 [main] DEBUG org.hibernate.jdbc.ConnectionManager - opening JDBC connection
11:02:56.121 [main] TRACE o.h.c.DriverManagerConnectionProvider - total checked-out connections: 0
11:02:56.121 [main] TRACE o.h.c.DriverManagerConnectionProvider - using pooled JDBC connection, pool size: 0
11:02:56.121 [main] DEBUG o.h.transaction.JDBCTransaction - current autocommit status: false
11:02:56.121 [main] TRACE org.hibernate.jdbc.JDBCContext - after transaction begin
11:02:56.121 [main] TRACE org.hibernate.impl.SessionImpl - setting flush mode to: MANUAL
11:02:56.121 [main] …Run Code Online (Sandbox Code Playgroud) hibernate ×3
java ×2
spring-boot ×2
jdbc ×1
jpa ×1
logging ×1
session ×1
spring ×1
spring-data ×1