我想在春季启动时通过p6spy显示sql参数,因为hibernate显示的sql参数相当庞大。但出于某种原因,p6spy记录器输出了两次sql消息,尽管实际上只对数据库执行一次查询。通常的spring应用程序通常与我的p6spy配置一起工作。Spring引导应用程序通常与hibernate输出一起工作。
spy.properties:
driverlist=org.postgresql.Driver
appender=com.p6spy.engine.spy.appender.Slf4JLogger
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=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>HibernateConfig:
@Configuration
@EnableTransactionManagement
public class HibernateConfig {
@Bean
public 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");
sessionFactory.setDataSource(dataSource());
sessionFactory.setHibernateProperties(hibernateProperties);
return sessionFactory;
}
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.p6spy.engine.spy.P6SpyDriver");
dataSource.setUrl("jdbc:p6spy:postgresql://localhost:5432/p6spy");
dataSource.setUsername("postgres");
dataSource.setPassword("postgres");
return new P6DataSource(dataSource);
}
@Bean
public HibernateTransactionManager getTransactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(getSessionFactory().getObject());
return transactionManager;
}}
我期望有一个sql输出,但得到两个具有不同p6spy连接的类似sql输出:
1) p6spy -在服务器初创企业(applicationName、hostName、ip、startDate、stopDate、startupId)值(‘,’Dimon-膝上型计算机‘,'192.168.88.244','2019-02-11T12:00:46.989+0300',NULL,1)中插入时间为1
2) p6spy -在服务器初创企业(applicationName、hostName、ip、startDate、stopDate、startupId)值(‘,’Dimon-膝上型计算机‘,'192.168.88.244','2019-02-11T12:00:46.989+0300',NULL,1)中插入时间为1
如您所见,除了连接(2和5)之外,这些输出都是相似的。
发布于 2019-04-07 19:08:46
发布于 2019-02-11 14:49:49
结果表明,spring引导自动为p6spy创建包装器,因此这个问题得到了解决,可以替换行
return new P6DataSource(dataSource)在线
return dataSourse;https://stackoverflow.com/questions/54627574
复制相似问题