为了账号安全,请及时绑定邮箱和手机立即绑定

p6spy 使用 spring boot 两次输出 sql 消息

p6spy 使用 spring boot 两次输出 sql 消息

达令说 2022-06-15 10:06:40
我想在 spring boot 中通过 p6spy 显示 sql 参数,因为 hibernate 显示的 sql 参数非常庞大。但由于某种原因,p6spy 记录器输出 sql 消息两次,尽管实际上对 db 的查询执行一次。通常的 spring 应用程序可以正常使用我的 p6spy 配置。Spring Boot 应用程序可以正常使用休眠输出。spy.properties:driverlist=org.postgresql.Driverappender=com.p6spy.engine.spy.appender.Slf4JLoggerlogMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormatcustomLogMessageFormat=time %(executionTime)|con %(connectionId)|%(sqlSingleLine)log4j2.xml:<?xml version="1.0" encoding="UTF-8"?><Configuration status="WARN">    <Properties>        <Property name="layoutPattern">            %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n        </Property>    </Properties><Appenders>    <Console name="stdout">        <PatternLayout pattern="${layoutPattern}"/>    </Console></Appenders><Loggers>    <Root level="info">        <AppenderRef ref="stdout" />    </Root></Loggers></Configuration>休眠配置:@Configuration@EnableTransactionManagementpublic class HibernateConfig {@Beanpublic LocalSessionFactoryBean getSessionFactory(){    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();    sessionFactory.setPackagesToScan("bel.rdigital.p6spy.boot.test.model");    Properties hibernateProperties = new Properties();    hibernateProperties.setProperty(DIALECT, "org.hibernate.dialect.PostgreSQLDialect");    hibernateProperties.setProperty(HBM2DDL_AUTO, "create");    hibernateProperties.setProperty(SHOW_SQL, "true");}我期望一个 sql 输出,但得到两个具有不同 p6spy 连接的相似 sql 输出:1) p6spy - time 1|con 2|insert into serverstartups (applicationName, hostName, ip, startDate, stopDate, startupId) 值 ('', 'DIMON-LAPTOP', '192.168.88.244', '2019-02-11T12: 00:46.989+0300',空值,1)2) p6spy - time 1|con 5|insert into serverstartups (applicationName, hostName, ip, startDate, stopDate, startupId) 值 ('', 'DIMON-LAPTOP', '192.168.88.244', '2019-02-11T12: 00:46.989+0300',空值,1)如您所见,除了连接(2 和 5)之外,这些输出是相似的
查看完整描述

2 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

Spring Boot 不会自动为 DataSource 创建包装器。但是 p6spy 有两种拦截方式

使用 P6DataSource 包装您的 DataSource 或修改您的连接 URL 以添加“p6spy:”。

你不应该同时使用两者。


查看完整回答
反对 回复 2022-06-15
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

原来spring boot会自动为p6spy创建wrapper,所以换行解决了这个问题

return new P6DataSource(dataSource)

在线的

return dataSourse;


查看完整回答
反对 回复 2022-06-15
  • 2 回答
  • 0 关注
  • 352 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信