Sniffy是一个很棒的小项目:


  Sniffy会计算已执行的SQL查询的数量,并提供一个用于验证它们的API。Sniffy专为单元测试而设计,可让您测试特定方法的查询次数是否不超过N个SQL查询。特别适用于捕获ORM N + 1问题早期阶段


它还提供了一个Servlet过滤器,该过滤器将HTML注入到页面中,并带有一个弹出窗口,显示您执行的查询。该文档说明了如何为基于传统web.xml的应用程序而非Spring Boot配置它。通过将这个bean添加到@Configuration类中,我设法注册了servlet过滤器:

@Bean
public FilterRegistrationBean snifferFilter()
{
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
    SnifferFilter filter = new SnifferFilter();
    filter.setInjectHtml(true);
    filterRegistrationBean.setFilter(filter);
    filterRegistrationBean.setName("sniffer");
    filterRegistrationBean.addUrlPatterns("/*");
    return filterRegistrationBean;
}


文档还说,我还更新了JDBC URL:


  在JDBC连接URL上添加sniffer:前缀例如,jdbc:h2:〜/ test应该更改为sniffer:jdbc:h2:mem:


因此,我在application.yml中添加了以下内容:

spring.datasource.url: sniffer:jdbc:mysql://localhost:3306


但是,当我启动我的应用程序时,它失败并显示以下错误:


  网址必须以“ jdbc”开头

最佳答案

香气的作者在这里!

实际上,从版本3.0.7(2016年4月)开始,您必须在Spring Boot应用程序中显式指定驱动程序类名称。错误跟踪器中有一个open issue可以自动配置它。

顺便说一句,sniffy 3.0.5使用@EnableSniffy注释引入了对Spring Boot的开箱即用支持,因此您不必自己创建FilterRegistrationBean -只需将注释放入您的应用程序类中,如下所示:

import io.sniffy.boot.EnableSniffy;

@SpringBootApplication
@EnableAutoConfiguration
@EnableSniffy
public class Application {

    public static void main(String[] args) throws ClassNotFoundException {
        SpringApplication.run(Application.class, args);
    }

}

09-25 21:16