Java 如何使用Spring Boot配置Sniffy?

Java 如何使用Spring Boot配置Sniffy?,java,jdbc,spring-boot,web.xml,sniffy,Java,Jdbc,Spring Boot,Web.xml,Sniffy,是一个很酷的小项目: Sniffy统计执行的SQL查询的数量,并提供一个API来验证这些查询。它是为单元测试设计的,允许您测试特定方法是否生成超过N个SQL查询,尤其是在早期阶段捕获ORM N+1问题非常有用 它还提供了一个servlet过滤器,该过滤器将HTML注入到页面中,并弹出一个显示您执行的查询的窗口。该文档解释了如何为传统的基于web.xml的应用程序而不是Spring Boot配置它。通过将此bean添加到@Configuration类,我成功注册了servlet过滤器: @Bean

是一个很酷的小项目:

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:prefix添加到JDBC连接url,例如JDBC:h2:~/test应更改为sniffer:JDBC:h2:mem:

因此,我将以下内容添加到我的
应用程序.yml

spring.datasource.url: sniffer:jdbc:mysql://localhost:3306
但当我启动应用程序时,它会失败,并出现以下错误:

URL必须以“jdbc”开头


我设法解决了这个问题,Spring Boot广泛使用了自动配置,并试图从连接字符串中检测
数据库驱动程序。由于连接字符串不再以
jdbc
开头,它遇到了一个问题

这只是在我的
应用程序.yml中指定
驱动程序类名的一个例子,而不是让Spring Boot尝试自动检测它:

spring.datasource.driver-class-name: io.sniffy.MockDriver
我是个爱挑剔的作家

事实上,从版本3.0.7(2016年4月)开始,您必须在Spring引导应用程序中明确指定驱动程序类名。在bug追踪器中有一个自动配置的程序

顺便说一句,sniffy 3.0.5使用
@enablesiffy
注释引入了对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);
    }

}

不适用于sniffy 3.1.2、spring boot 1.5.2、oracle 11g、嵌入式tomcat。URL必须以“jdbc'@ts.tsogo”开头。通过向Spring Boot应用程序类添加
@EnableSniffy
,尝试3.0.5版中引入的开箱即用支持。因此不再需要修改数据源url或驱动程序类名。但Spring启动应用程序上的“EnableSniffy无法解析为类型”错误class@ts.tsogooSniffy 3.1中添加了
@EnableSniffy
注释,因此只要使用正确的版本,该注释就可以工作,请参见: