欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

multi-statement not allow解决

发布时间:2025/3/20 编程问答 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 multi-statement not allow解决 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

2019独角兽企业重金招聘Python工程师标准>>>

参考网页

https://blog.csdn.net/mrczr/article/details/78903468

https://blog.csdn.net/yhl_jxy/article/details/78645010

涉及的技术栈

SpringBoot、MyBatis、Druid。

解决--Druid配置类源代码

import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.DependsOn;import org.springframework.context.annotation.Primary;import com.alibaba.druid.filter.Filter;import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.wall.WallConfig;import com.alibaba.druid.wall.WallFilter;/**** 描述:如果不使用代码手动初始化DataSource的话,监控界面的SQL监控会没有数据("是spring boot的bug???")** @author chhliu 创建时间:2017年2月9日 下午10:33:08* @version 1.2.0*/@Configurationpublic class DruidConfiguration {@Value("${spring.datasource.url}")private String dbUrl;@Value("${spring.datasource.username}")private String username;@Value("${spring.datasource.password}")private String password;// @Value("${spring.datasource.driverClassName}")@Value("${spring.datasource.driver-class-name}")private String driverClassName;@Value("${spring.datasource.initialSize}")private int initialSize;@Value("${spring.datasource.minIdle}")private int minIdle;@Value("${spring.datasource.maxActive}")private int maxActive;@Value("${spring.datasource.maxWait}")private int maxWait;@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")private int timeBetweenEvictionRunsMillis;@Value("${spring.datasource.minEvictableIdleTimeMillis}")private int minEvictableIdleTimeMillis;@Value("${spring.datasource.validationQuery}")private String validationQuery;@Value("${spring.datasource.testWhileIdle}")private boolean testWhileIdle;@Value("${spring.datasource.testOnBorrow}")private boolean testOnBorrow;@Value("${spring.datasource.testOnReturn}")private boolean testOnReturn;@Value("${spring.datasource.poolPreparedStatements}")private boolean poolPreparedStatements;@Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")private int maxPoolPreparedStatementPerConnectionSize;@Value("${spring.datasource.filters}")private String filters;@Value("${spring.datasource.connectionProperties}")private String connectionProperties;@Value("${spring.datasource.useGlobalDataSourceStat}")private boolean useGlobalDataSourceStat;@AutowiredWallFilter wallFilter;@Bean// 声明其为Bean实例@Primary// 在同样的DataSource中,首先使用被标注的DataSourcepublic DataSource dataSource() {DruidDataSource datasource = new DruidDataSource();datasource.setUrl(this.dbUrl);datasource.setUsername(username);datasource.setPassword(password);datasource.setDriverClassName(driverClassName);// configurationdatasource.setInitialSize(initialSize);datasource.setMinIdle(minIdle);datasource.setMaxActive(maxActive);datasource.setMaxWait(maxWait);datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);datasource.setValidationQuery(validationQuery);datasource.setTestWhileIdle(testWhileIdle);datasource.setTestOnBorrow(testOnBorrow);datasource.setTestOnReturn(testOnReturn);datasource.setPoolPreparedStatements(poolPreparedStatements);datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);datasource.setUseGlobalDataSourceStat(useGlobalDataSourceStat);try {datasource.setFilters(filters);} catch (SQLException e) {System.err.println("druid configuration initialization filter: "+ e);}datasource.setConnectionProperties(connectionProperties);// filterList<Filter> filterList = new ArrayList<Filter>();//在设置之前先判断是都已经存在WallConfig,如果有,直接将现有的替换掉List<Filter> filters = datasource.getProxyFilters();boolean isExist = false;for(Filter filter:filters){if(filter instanceof WallFilter){((WallFilter)filter).setConfig(wallConfig());isExist = true;}}if(!isExist){filterList.add(wallFilter);datasource.setProxyFilters(filterList);}return datasource;}@Bean(name = "wallFilter")@DependsOn("wallConfig")public WallFilter wallFilter(WallConfig wallConfig) {WallFilter wallFilter = new WallFilter();wallFilter.setConfig(wallConfig);return wallFilter;}@Bean(name = "wallConfig")public WallConfig wallConfig() {WallConfig wallConfig = new WallConfig();wallConfig.setMultiStatementAllow(true);// 允许一次执行多条语句wallConfig.setNoneBaseStatementAllow(true);// 允许一次执行多条语句return wallConfig;}}

 

重点代码

//在设置之前先判断是都已经存在WallConfig,如果有,直接将现有的替换掉List<Filter> filters = datasource.getProxyFilters();boolean isExist = false;for(Filter filter:filters){if(filter instanceof WallFilter){((WallFilter)filter).setConfig(wallConfig());isExist = true;}}if(!isExist){filterList.add(wallFilter);datasource.setProxyFilters(filterList);}

描述

需要判断WallConfig是否已存在。WallConfig不存在时可直接如下操作:

filterList.add(wallFilter);

datasource.setProxyFilters(filterList);

已存在的情况下则需要替换之前的WallConfig。

 

转载于:https://my.oschina.net/u/3866531/blog/2209692

总结

以上是生活随笔为你收集整理的multi-statement not allow解决的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。