SpringBoot整合 阿里Druid 操作步骤

Hikari 性能上比 Druid 更好,但是 Druid 有配套的监控安全管理功能

 

引入 Druid 依赖

  
 	com.alibaba  
 	druid  
 	1.1.12  
  

 

Druid 全局配置 (type值设置为com.alibaba.druid.pool.DruidDataSource

 	spring:  
 	  datasource:  
 	    username: root  
 	    password: root  
 	    url: jdbc:mysql://127.0.0.1:3306/jdbc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8  
 	    driver-class-name: com.mysql.cj.jdbc.Driver  
 	    type: com.alibaba.druid.pool.DruidDataSource  
 	    initialSize: 8  
 	    minIdle: 5  
 	    maxActive: 20  
 	    maxWait: 60000  
 	    timeBetweenEvictionRunsMillis: 60000  
 	    minEvictableIdleTimeMillis: 300000  
 	    validationQuery: SELECT 1 FROM DUAL  
 	    testWhileIdle: true  
 	    testOnBorrow: false  
 	    testOnReturn: false  
 	    poolPreparedStatements: true  
 	    filters: stat,wall,logback  
 	    maxPoolPreparedStatementPerConnectionSize: 25  
 	    useGlobalDataSourceStat: true  
 	    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

 

注意:此时你可以通过测试类测试,发现数据源已经切换为 DruidDataSource ,但是 配置中 的属性没有与它绑定上。

 

 

自定义配置类,将配置中属性与 DruidDataSource 属性绑定,

 	@Configuration  
 	public class DruidConfig {  
 	    //绑定数据源配置  
 	    @ConfigurationProperties(prefix = "spring.datasource")  
 	    @Bean  
 	    public DataSource druid() {  
 	        DruidDataSource druidDataSource = new DruidDataSource();  
 	        return druidDataSource;  
 	    } 
 	}  

 

 

配置Druid监控

 	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.servlet.Filter;  
 	import javax.sql.DataSource;  
 	import java.util.Arrays;  
 	import java.util.HashMap;  
 	import java.util.Map;  
 	  
 	@Configuration  
 	public class DruidConfig {  
 	  
 	    //绑定数据源配置  
 	    @ConfigurationProperties(prefix = "spring.datasource")  
 	    @Bean  
 	    public DataSource druid() {  
 	        DruidDataSource druidDataSource = new DruidDataSource();  
 	        return druidDataSource;  
 	    }  
 	  
 	    /** 
 	     * 配置Druid监控 
 	     * 1. 配置一个管理后台的Servlet 
 	     * 2. 配置一个监控的filter 
 	     */  
 	    @Bean // 1. 配置一个管理后台的Servlet  
 	    public ServletRegistrationBean statViewServlet() {  
 	        //StatViewServlet是 配置管理后台的servlet  
 	        ServletRegistrationBean bean =  
 	                new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");  
 	        //配置初始化参数  
 	        Map initParam = new HashMap<>();  
 	        //访问的用户名密码  
 	        initParam.put(StatViewServlet.PARAM_NAME_USERNAME, "root");  
 	        initParam.put(StatViewServlet.PARAM_NAME_PASSWORD, "123");  
 	        //允许访问的ip,默认所有ip访问  
 	        initParam.put(StatViewServlet.PARAM_NAME_ALLOW, "");  
 	        //禁止访问的ip  
 	        initParam.put(StatViewServlet.PARAM_NAME_DENY, "192.168.10.1");  
 	        bean.setInitParameters(initParam);  
 	        return bean;  
 	    }  
 	  
 	    /**  
 	     * 配置一个监控的filter  
 	     * @return  
 	     */  
 	    @Bean  
 	    public FilterRegistrationBean filter() {  
 	        FilterRegistrationBean bean = new FilterRegistrationBean<>();  
 	        bean.setFilter(new WebStatFilter());  
 	        //配置初始化参数  
 	        Map initParam = new HashMap<>();  
 	        //排除请求  
 	        initParam.put(WebStatFilter.PARAM_NAME_EXCLUSIONS, "*.js,*.css,/druid/*");  
 	        //拦截所有请求  
 	        bean.setUrlPatterns(Arrays.asList("/*"));  
 	        return bean;  
 	    }  
 	}

 

注意:

       数据库连接池的工作机制

              J2EE服务器启动时会建立一定数量的连接池,并一直维持不少于此数目的此链接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其标记为忙。如果当前没有空闲链接,池程序就会新建一定数量的池连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接标记为空闲,其它调用就可以使用这个连接。

              开程序运行过程中,每次客户操作数据库的时都需要建立数据库连接,并且使用完连接后需要进行关闭操作(JDBC编程的时候,明显会感觉到),那么这个操作非常过于频繁,所以我们开发的时候需要通过池的概念优化程序。

              如下图描述:

                     绿色框为我们的连接池(池驱动程序),橘色为我们的客户端,黄色描述数据库。

                    SpringBoot整合 阿里Druid 操作步骤_第1张图片

 

 

 

 

 

你可能感兴趣的:(后端笔记,阿里Druid数据监控配置,springboot)