`
颖宝blingbling
  • 浏览: 40812 次
  • 性别: Icon_minigender_1
  • 来自: China
文章分类
社区版块
存档分类
最新评论

SpringBoot集成Druid不支持多条SQL

 
阅读更多

在DataSource 初始化Bean 添加

List<Filter> proxyFilters = new ArrayList<Filter>();
			WallFilter statFilter = new WallFilter();
			WallConfig config = new WallConfig();
			config.setMultiStatementAllow(true); // 批量操作
			statFilter.setConfig(config);
			proxyFilters.add(statFilter);
			druidDataSource.setProxyFilters(proxyFilters);

贴上自己的Config

package com.wstro.config;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import com.alibaba.druid.filter.Filter;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import com.alibaba.druid.wall.WallConfig;
import com.alibaba.druid.wall.WallFilter;

/**
 * Druid数据源配置
 * 
 * @author Joey
 * @Email 2434387555@qq.com
 *
 */
@Configuration
@EnableTransactionManagement // 启注解事务管理
public class DataSourceConfig {
	private Logger logger = LoggerFactory.getLogger(DataSourceConfig.class);

	@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}")
	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;

	/**
	 * 注册DruidServlet
	 * 
	 * @return ServletRegistrationBean
	 */
	@Bean
	public ServletRegistrationBean druidServletRegistrationBean() {
		ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
		servletRegistrationBean.setServlet(new StatViewServlet());
		servletRegistrationBean.addUrlMappings("/druid/*");
		// 白名单:
		servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
		// IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not
		// permitted to view this page.
		// 登录查看信息的账号密码.
		servletRegistrationBean.addInitParameter("loginUsername", "joey");
		servletRegistrationBean.addInitParameter("loginPassword", "jay");
		// 是否能够重置数据.
		servletRegistrationBean.addInitParameter("resetEnable", "false");
		return servletRegistrationBean;
	}

	/**
	 * 注册DruidFilter拦截
	 * 
	 * @return FilterRegistrationBean
	 */
	@Bean
	public FilterRegistrationBean druidFilterRegistrationBean() {
		FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
		filterRegistrationBean.setFilter(new WebStatFilter());
		Map<String, String> initParams = new HashMap<String, String>();
		// 设置忽略请求
		initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
		filterRegistrationBean.setInitParameters(initParams);
		filterRegistrationBean.addUrlPatterns("/*");
		return filterRegistrationBean;
	}

	/**
	 * 配置DataSource
	 * 
	 * @return DataSource
	 * @throws SQLException
	 */
	@Bean(initMethod = "init", destroyMethod = "close")
	@Primary
	public DataSource dataSource() throws SQLException {
		DruidDataSource druidDataSource = new DruidDataSource();
		druidDataSource.setUrl(dbUrl);
		druidDataSource.setUsername(username);
		druidDataSource.setPassword(password);
		druidDataSource.setDriverClassName(driverClassName);
		// configuration
		druidDataSource.setInitialSize(initialSize);
		druidDataSource.setMinIdle(minIdle);
		druidDataSource.setMaxActive(maxActive);
		druidDataSource.setMaxWait(maxWait);
		druidDataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
		druidDataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
		druidDataSource.setValidationQuery(validationQuery);
		druidDataSource.setTestWhileIdle(testWhileIdle);
		druidDataSource.setTestOnBorrow(testOnBorrow);
		druidDataSource.setTestOnReturn(testOnReturn);
		druidDataSource.setPoolPreparedStatements(poolPreparedStatements);
		druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
		try {
			List<Filter> proxyFilters = new ArrayList<Filter>();
			WallFilter statFilter = new WallFilter();
			WallConfig config = new WallConfig();
			config.setMultiStatementAllow(true); // 批量操作
			statFilter.setConfig(config);
			proxyFilters.add(statFilter);
			druidDataSource.setProxyFilters(proxyFilters);
			druidDataSource.setFilters(filters);
		} catch (SQLException e) {
			logger.error("druid configuration initialization filter", e);
		}
		druidDataSource.setConnectionProperties(connectionProperties);
		return druidDataSource;
	}

}

properties

#JDBC
# \u6570\u636E\u5E93\u8BBF\u95EE\u914D\u7F6E
# \u4E3B\u6570\u636E\u6E90\uFF0C\u9ED8\u8BA4\u7684
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.1.88:3306/wstro?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root

# \u4E0B\u9762\u4E3A\u8FDE\u63A5\u6C60\u7684\u8865\u5145\u8BBE\u7F6E\uFF0C\u5E94\u7528\u5230\u4E0A\u9762\u6240\u6709\u6570\u636E\u6E90\u4E2D
# \u521D\u59CB\u5316\u5927\u5C0F\uFF0C\u6700\u5C0F\uFF0C\u6700\u5927
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20

# \u914D\u7F6E\u83B7\u53D6\u8FDE\u63A5\u7B49\u5F85\u8D85\u65F6\u7684\u65F6\u95F4
spring.datasource.maxWait=60000

# \u914D\u7F6E\u95F4\u9694\u591A\u4E45\u624D\u8FDB\u884C\u4E00\u6B21\u68C0\u6D4B\uFF0C\u68C0\u6D4B\u9700\u8981\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2
spring.datasource.timeBetweenEvictionRunsMillis=60000

# \u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u5728\u6C60\u4E2D\u6700\u5C0F\u751F\u5B58\u7684\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false

# \u6253\u5F00PSCache\uFF0C\u5E76\u4E14\u6307\u5B9A\u6BCF\u4E2A\u8FDE\u63A5\u4E0APSCache\u7684\u5927\u5C0F
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20

# \u914D\u7F6E\u76D1\u63A7\u7EDF\u8BA1\u62E6\u622A\u7684filters\uFF0C\u53BB\u6389\u540E\u76D1\u63A7\u754C\u9762sql\u65E0\u6CD5\u7EDF\u8BA1\uFF0C'wall'\u7528\u4E8E\u9632\u706B\u5899
spring.datasource.filters=stat,wall,log4j

# \u901A\u8FC7connectProperties\u5C5E\u6027\u6765\u6253\u5F00mergeSql\u529F\u80FD\uFF1B\u6162SQL\u8BB0\u5F55
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;druid.stat.logSlowSql=true;

# \u5408\u5E76\u591A\u4E2ADruidDataSource\u7684\u76D1\u63A7\u6570\u636E
#spring.datasource.useGlobalDataSourceStat=true

分享到:
评论

相关推荐

    SpringBoot(七)SpringBoot整合Druid实现数据库密码加密.pdf

    druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 ``` 这里需要注意的是`spring.datasource.druid.password`需要替换为加密后的密码,而`config.decryptPublickey`则需要替换为之前生成的公钥。 ##### 4.2...

    SpringBoot Druid整合,SpringBoot 集成Druid

    通过以上配置,我们就可以在SpringBoot项目中使用Druid作为数据库连接池,并且可以实时监控数据库连接的状态和SQL执行情况,为系统的健康运行提供了保障。 在实际开发中,根据项目需求,还可以进一步定制Druid的...

    springboot druid maven多数据源(mysql+SqlServer)

    本项目将介绍如何在SpringBoot项目中结合Maven构建一个支持多数据源的系统,特别是如何处理MySQL和SQLServer两种不同的数据库类型,并使用Druid作为数据源连接池。 首先,我们需要理解“多数据源”这一概念。多数据...

    SpringBoot+druid+多数据源示例

    本示例将详细讲解如何在SpringBoot项目中集成Druid并实现多数据源的自动切换。 首先,我们需要理解多数据源的概念。多数据源意味着应用程序可以同时连接和操作多个不同的数据库,这对于数据分层、高可用性和分布式...

    springboot+druid+mybatis plus整合demo

    总的来说,这个项目展示了SpringBoot、Druid和MyBatis Plus的集成方式,为开发者提供了一个快速搭建Java Web应用的基础框架。通过这样的整合,我们可以享受到SpringBoot的便利性,Druid的强大监控和管理,以及...

    Springboot整合Druid与Mybatis的多数据源切换

    **Mybatis** 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    springboot整合druid、mybatis连接gbase8s.doc

    在本文中,我们将深入探讨如何将SpringBoot与Druid数据源和MyBatis集成,以连接到Gbase8s v8.7数据库。Gbase8s是一款高性能的关系型数据库管理系统,特别适合处理大规模数据。我们将使用Spring Boot 2.1.11版本,...

    springboot+druid+mybatis多数据源动态切换案例

    本案例中,"springboot+druid+mybatis多数据源动态切换"主要涉及以下几个核心知识点: 1. **SpringBoot多数据源配置**:SpringBoot通过@ConfigurationProperties注解可以从配置文件中读取数据源的相关信息,如URL、...

    访问SQLServer - springboot自定义DBUtil(druid连接池)操作SQLServer数据库

    Spring-Boot通过druid连接池获取连接操作SQLServer数据库 总结:【共3步】 第1步:添加druid和MSSQL Driver的依赖项; 第2步:配置连接字符串; 第3步:创建数据库操作类,使用@Bean注入DruidDataSource, 然后根据...

    springboot集成druid/Hikari

    - Druid的优点在于其丰富的监控功能,如SQL审计、Web监控页面等,而HikariCP则以更快的连接速度和更低的资源消耗著称。 - 如果项目需要强大的监控功能,Druid可能是更好的选择;如果对性能有极高要求,HikariCP...

    springBoot+druid+mybatis+redis+logback

    在SpringBoot项目中,Druid可以作为数据源,提供高效的连接管理和性能监控,如SQL执行时间、连接状态等。此外,Druid还支持Web监控,开发者可以通过简单的配置,在项目中添加一个监控页面,实时查看数据库连接池的...

    springboot+mybatis+druid整合 包括druid监控配置

    搞了一下午 见识到了springboot和druid的好用之处 监控太好用搞了一下午 见识到了springboot和druid的好用之处 监控太好用

    springboot+mybatis3+druid+postgresql

    在本项目中,"springboot+mybatis3+druid+postgresql"的组合是一个常见的高效、轻量级的Java Web开发架构。Spring Boot简化了Spring应用程序的创建和配置,MyBatis作为持久层框架提供了灵活的SQL映射,Druid是数据库...

    springboot集成Druid和mybatisplus1

    1. **事务管理**:Spring Boot默认支持声明式事务管理,Druid数据源会自动参与到Spring的事务管理中,与MyBatisPlus的事务处理无缝对接。 2. **日志打印**:Druid提供了SQL执行日志的打印,可以配合MyBatisPlus的...

    基于SpringBoot、Druid和Mybatis的Sql质量检查与优化设计源码

    该项目是一个基于SpringBoot、Druid和Mybatis框架构建的Sql质量检查与优化解决方案源码,总共有47个文件组成,其中包括34个Java源文件、3个XML配置文件、2个Markdown文件、2个Idea项目配置文件、2个SQL脚本文件、1个...

    SpringBoot整合Druid数据源

    在本文中,我们将深入探讨如何将SpringBoot与Druid数据源进行整合,以及如何启用后台的Servlet和Filter监控。SpringBoot以其简洁的配置和强大的自动配置能力,深受开发者喜爱,而Druid则是一款功能丰富的数据库连接...

    SpringBoot整合JDBC&Druid;数据源示例

    在本文中,我们将深入探讨如何在SpringBoot项目中整合JDBC和Druid数据源,并创建一个具有监控功能的示例。SpringBoot以其简洁的配置和快速的开发能力,深受Java开发者喜爱。而Druid作为一款优秀的数据库连接池,提供...

    maven 整合 springboot mybatis druid

    5. 使用Druid监控:通过SpringBoot的自动配置,Druid提供了一个监控页面,可以查看数据库连接池的状态、SQL执行情况等。 6. 实现业务逻辑:在Service层调用Mapper接口,实现业务功能。 7. 模块化设计:`keydong-...

    SpringBoot集成TDengine程序Demo

    **SpringBoot集成TDengine程序Demo**是一篇关于如何在SpringBoot应用中整合TDengine数据库的实战教程。SpringBoot以其简洁的配置和快速的开发能力深受Java开发者喜爱,而TDengine则是一款高性能、分布式、适用于...

Global site tag (gtag.js) - Google Analytics