multi-statement not allow解决
生活随笔
收集整理的這篇文章主要介紹了
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解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NGINX访谈:软件负载均衡、API网关
- 下一篇: wordpress 拾遗