工作中有一个执行多条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;
}
}
重启服务