Druid在Spring boot的使用

tech2023-01-23  58

Druid在Spring boot的使用

1. Druid简介

Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid是阿里巴巴开发的号称为监控而生的数据库连接池!

​ Druid是一个JDBC组件,包括三个部分

基于FIlter-Chain模式的插件体系DruidDataSoruce高效的数据库连接池SQLParser

2.Druid的功能

替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。

可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。

数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。

SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。

扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。所以Druid可以:

充当数据库连接池。

可以监控数据库访问性能

获得SQL执行日志

3.Druid适用场景

Druid应用最多的是类似于广告分析创业公司Metamarkets中的应用场景,如广告分析、互联网广告系统监控以及网络监控等。当业务中出现以下情况时,Druid是一个很好的技术方案选择:

需要交互式聚合和快速探究大量数据时;需要实时查询分析时;具有大量数据时,如每天数亿事件的新增、每天数10T数据的增加;对数据尤其是大数据进行实时分析时;需要一个高可用、高容错、高性能数据库时

4.Spring Boot中使用Drui

​ 1、在maven依赖中导入Druid依赖,Druid依赖包可以去Maven仓库选择版本

​ 集成版本选择Spring boot版本

<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency>

​ https://mvnrepository.com/artifact/org.apache.maven/maven-plugin-api

​ 2、在yml文件中配置数据池常用属性

spring: datasource: username: root password: root url: jdbc:mysql://localhost:3306/stuinfo driver-class-name: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource #以下属性在datasource是没有的,所以变颜色 initialSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall,log4j maxPoolPreparedStatementPerConnectionSize: 20 useGlobalDataSourceStat: true connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

​ 3、创建config配置文件

package com.ement.config; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import org.springframework.boot.context.properties.ConfigurationProperties; 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 javax.sql.DataSource; import java.util.Arrays; import java.util.HashMap; @Configuration //表示是一个配置类 public class DruidConfig { //读取spring。datasource元素 @ConfigurationProperties(prefix = "spring.datasours") @Bean //加入容器 public DataSource druid(){ return new DruidDataSource(); } public ServletRegistrationBean statViwServlet(){ //添加Durid的Servlet,捕捉所有的/druid/*请求 ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); HashMap<String,String> map = new HashMap<>(); //登入账号密码 map.put("loginUsername","admin"); map.put("loginPassword","admin"); //白名单 map.put("allow",""); return servletRegistrationBean; } @Bean public FilterRegistrationBean webStatFilter(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new WebStatFilter()); //设置拦截所有 filterRegistrationBean.setUrlPatterns(Arrays.asList("/*")); HashMap<String,String> map = new HashMap<>(); //那些请求不拦截 map.put("exclusions","*.js,*.css,*./druid/*"); filterRegistrationBean.setInitParameters(map); return filterRegistrationBean; } }

配置完以后可以访问http://localhost:8888/druid/index.html进去查看

nBean.setInitParameters(map); return filterRegistrationBean; }

}

配置完以后可以访问http://localhost:8888/druid/index.html进去查看 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020090312465548.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzE2OTI5,size_16,color_FFFFFF,t_70#pic_center)
最新回复(0)