日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

multi-statement not allow解决

發布時間:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。