今天试图在一个ssm框架的项目中在mybatis insert中执行多条sql,出现异常:Caused by: java.sql.SQLException: sql injection violation, multi-statement not allow,特此记录一下
找了许久,发现是druid的wall sql监控问题,wall监控下,默认是不支持批量sql执行的,经过调试发现报错位置为multiStatementAllow设置为false抛出的异常。
解决方法1. 关闭wall监控
ssm框架下,一般配置filters的文件为db.properties,在文件中找到如下配置把wall去掉,并在jdbc的URL 上加上allowMultiQueries=true参数即可。此方法配置后在Druid的监控页是没有SQL监控信息的 所以不推荐此方法
2. 配置wall
将wall的配置与filters分开 ,db里的filters不再配置wall,在spring-mybatis.xml(一般项目中这个配置文件是叫这个名字)中连接池后面加上以下配置:
至此,再执行批量sql就可以了



