springboot集成druid導致批量SQL操作異常問題的解決

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章