【问题标题】:How do I configure Sniffy with Spring Boot?如何使用 Spring Boot 配置 Sniffy?
【发布时间】:2016-07-04 02:06:13
【问题描述】:

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,文档说:

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

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

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

但是当我启动我的应用程序时,它会因为这个错误而失败:

网址必须以“jdbc”开头

【问题讨论】:

    标签: java jdbc spring-boot web.xml sniffy


    【解决方案1】:

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

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

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

    【讨论】:

    • 不适用于 sniffy 3.1.2、spring boot 1.5.2、oracle 11g、嵌入式 tomcat。 URL 必须以“jdbc”开头
    • @ts.tsogoo 通过向 Spring Boot 应用程序类添加 @EnableSniffy 来尝试在 3.0.5 版中引入的开箱即用支持。因此不再需要修改数据源 url 或驱动程序类名称。
    • tnx 罗伯特。但 Spring Boot 应用程序类出现“EnableSniffy 无法解析为类型”错误
    • @ts.tsogoo @EnableSniffy 注释是在 Sniffy 3.1 中添加的,因此只要您使用正确的版本,它就应该可以工作,请参阅:sniffy.io/docs/latest/#_using_sniffy_with_spring
    【解决方案2】:

    这里是嗅探作者!

    确实,从版本 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);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2014-10-04
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      • 2017-05-17
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多