关于MySQL同时执行多条SQL语句报:java.sql.SQLException: sql injection violation, multi-statement not allow :错误的解决

1 篇文章 0 订阅
1 篇文章 0 订阅

工作中有一个执行多条SQL语句的需求,使用的Druid连接池的默认配置

com.alibaba.druid.pool.DruidDataSource

普通SQL执行无异常,但是在同时执行多条SQL时报错。后来经百度得知Druid执行多条SQL时需要修改2项默认配置。

1、追加JDBC的链接参数 allowMultiQueries=true。示例如下:

jdbc:mysql://localhost:3306/demo?characterEncoding=utf8&useSSL=false&allowMultiQueries=true

2、重写DataSource的默认过滤器

 

package config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.wall.WallConfig;
import com.alibaba.druid.wall.WallFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.List;

/**
 * @author flys.li
 */
@Configuration
public class DateSourceConfiguration {

    @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 wallConfig = new WallConfig();

        /*Allow multiple SQL statements to be executed at a time*/
        wallConfig.setMultiStatementAllow(true);
        /*Other SQL statements that allow non-basic statements*/
        wallConfig.setNoneBaseStatementAllow(true);
        return wallConfig;
    }
}

重启服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值