springboot 集成druid過程中的問題記錄
項目中集成了druid作爲監控SQL運行及排查慢SQL,在集成成功後一切監控正常,但是在執行批量更新操作是,系統報錯sql injection violation, multi-statement not allow,表示不能進行批量操作,在網上搜索解決辦法有兩種:
1、在jdbc連接後面加allowMultiQueries=true,表示可以進行批量操作,但是沒有起作用;
2、自定義filter,如下
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
List filterList=new ArrayList<>();
filterList.add(wallFilter());
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;
}
如上進行自定義後,發現SQL監控頁面不再顯示,於是百般查找資料,發現只要去除dataSource自定義bean,保留wallFilter既可,如此批量更新正常,SQL監控也正常顯示;
application.properties中的配置不變,jdbc連接依然需要allowMultiQueries=true,最終自定義如下:
@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;
}