ssm框架中使用了druid连接池无法一次执行多条sql的问题

今天试图在一个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监控信息的 所以不推荐此方法
ssm框架中使用了druid连接池无法一次执行多条sql的问题_第1张图片
2. 配置wall

将wall的配置与filters分开 ,db里的filters不再配置wall,在spring-mybatis.xml(一般项目中这个配置文件是叫这个名字)中连接池后面加上以下配置:

<property name="proxyFilters">
            <list>
                <ref bean="wall-filter"/>
            list>
property>

<bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
        <property name="config" ref="wall-config" />
bean>

<bean id="wall-config" class="com.alibaba.druid.wall.WallConfig">
        <property name="multiStatementAllow" value="true" />
bean>

至此,再执行批量sql就可以了

你可能感兴趣的:(java,java,ssm,mybatis)