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);
}
}