springboot中配置mysql一次允许多条sql语句执行

在springboot中,如果想要对mysql一次性执行多条sql语句,在数据连接配置信息中,要增加allowMultiQueries=true,这样才能一次执行多条sql语句。

理论上这样就可以了,但实际中发现在springboot中,仅仅这样配置是没有用的,执行结果会出现异常,异常提示为:


Caused by: java.sql.SQLException: sql injection violation, multi-statement not allowcom.alibaba.druid.wall.WallFilter.check(WallFilter.java:714) 
atcom.alibaba.druid.wall.WallFilter.connection_prepareStatement(WallFilter.java:240) 
显示的异常为:sql injection violation, multi-statement not allow,意思是多条sql语句是不允许的,这是什么原因呢?


原来在springboot连接的druid的数据源中,多条语句执行被它拦截了。

在数据源配置文件里面,通过配置WallFilter就可以了。代码如下:


 @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource myDataSource() {
        List filterList=new ArrayList<>();
        filterList.add(wallFilter());
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setProxyFilters(filterList);
        return druidDataSource;
    }

    @Bean
    public WallFilter wallFilter(){
        WallFilter wallFilter=new WallFilter();
        wallFilter.setConfig(wallConfig());
        return wallFilter;
    }

    @Bean
    public WallConfig wallConfig(){
        WallConfig config =new WallConfig();
        config.setMultiStatementAllow(true);//允许一次执行多条语句
        config.setNoneBaseStatementAllow(true);//允许非基本语句的其他语句
        return config;
    }


您可能还会对下面的文章感兴趣: