繁体   English   中英

如何使用 Spring Boot 配置 Sniffy?

[英]How do I configure Sniffy with Spring Boot?

Sniffy是一个很酷的小项目:

Sniffy 计算执行的 SQL 查询的数量并提供用于验证它们的 API 它专为单元测试而设计,并允许您测试特定方法是否不超过 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,文档说:

将 sniffer: 前缀添加到 JDBC 连接 url 例如 jdbc:h2:~/test 应更改为 sniffer:jdbc:h2:mem:

所以我在application.yml添加了以下内容:

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

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

URL 必须以 'jdbc' 开头

嗅探作者在这里!

实际上,从 3.0.7 版(2016 年 4 月)开始,您必须在 Spring Boot 应用程序中明确指定驱动程序类名称。 错误跟踪器中有一个未解决的问题可以自动配置它。

顺便说一句,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);
    }

}

我设法找出了问题所在,Spring Boot 广泛使用了自动配置,并试图从连接字符串中检测DatabaseDriver 由于连接字符串不再以jdbc开头,因此遇到了问题。

这只是在我的application.yml中指定driver-class-name而不是让 Spring Boot 尝试自动检测它的情况:

spring.datasource.driver-class-name: io.sniffy.MockDriver

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM