本文记录Druid数据源的使用,自定义实现Drud的功能、监控页、登录、统计等。对SpringBoot数据访问使用Druid数据源的相关知识感兴趣额朋友一起看看吧
数据访问之druid数据源的使用
说明:该数据源druid,使用自定义方式实现,后面文章使用start启动器实现,学习思路为主。
为什么要使用数据源:
数据源是提高数据库连接性能的常规手段,数据源会负责维持一个数据连接池,当程序创建数据源实例时,系统会一次性地创建多个数据库连接,并把这些数据库连接保存在连接池中。
当程序需要进行数据库访问时,无须重新获得数据库连接,而是从连接池中取出一个空闲的数据库连接。
当程序使用数据库连接访问数据库结束后,无须关闭数据库连接,而是将数据库连接归还给连接池即可。
通过这种方式,就可避免频繁地获取数据库连接、关闭数据库连接所导致的性能下降
为什么要使用数据源
数据源是提高数据库连接性能的常规手段,数据源会负责维持一个数据连接池,当程序创建数据源实例时,系统会一次性地创建多个数据库连接,并把这些数据库连接保存在连接池中。当程序需要进行数据库访问时,无须重新获得数据库连接,而是从连接池中取出一个空闲的数据库连接。当程序使用数据库连接访问数据库结束后,无须关闭数据库连接,而是将数据库连接归还给连接池即可。通过这种方式,就可避免频繁地获取数据库连接、关闭数据库连接所导致的性能下降。
druid官方github地址
druid中文文档
druid的介绍以及优点:
druid是阿里巴巴开源平台上一个数据库连接池实现,它不但结合了c3p0、dbcp、proxool等数据库连接池的优点,同时还加入了日志监控,可以分别监控db池连接和sql的执行情 况,是一款针对监控而生的数据库连接池
整合第三方技术的两种方式
自定义实现druid数据源
引入数据源
博主版本:1.2.6<dependency>
<groupid>com.alibaba</groupid>
<artifactid>druid</artifactid>
<version>版本号</version>
</dependency>
配置数据源
因为在引入数据源,springboot默配置的数据源是hikaridatasource,所以我们如果要使用druid的话,需要自己创建一个数据源,并放到容器中使用,mydatasourceconfig文件代码如下:import com.alibaba.druid.pool.druiddatasource;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import javax.sql.datasource; //注意不要导错包
@configuration
//配置数据源
public class mydtasourceconfig {
@bean
public datasource datasource() {
return new druiddatasource(); //创建druid数据源
}
}
为什么我们创建的数据源可以使用呢?
在datasourceautoconfiguration中的以下部分可以发现:@configuration(proxybeanmethods = false)
@conditional(pooleddatasourcecondition.class)
@conditionalonmissingbean({ datasource.class, xadatasource.class })
@import({ datasourceconfiguration.hikari.class, datasourceconfiguration.tomcat.class,
datasourceconfiguration.dbcp2.class, datasourceconfiguration.oracleucp.class,
datasourceconfiguration.generic.class, datasourcejmxconfiguration.class })
protected static class pooleddatasourceconfiguration {
}
有引入datasourceconfiguration.hikari.class这个默认类,点击进入,@configuration(proxybeanmethods = false)
@conditionalonclass(hikaridatasource.class)
@conditionalonmissingbean(datasource.class)
@conditionalonproperty(name = "spring.datasource.type", havingvalue = "com.zaxxer.hikari.hikaridatasource",
matchifmissing = true)
static class hikari {
@bean
@configurationproperties(prefix = "spring.datasource.hikari")
hikaridatasource datasource(datasourceproperties properties) {
hikaridatasource datasource = createdatasource(properties, hikaridatasource.class);
if (stringutils.hastext(properties.getname())) {
datasource.setpoolname(properties.getname());
}
return datasource;
}
}
由上述代码可以发现,默认的配置源是hikaridatasource,但是有一个要求:
@conditionalonmissingbean(datasource.class)
就是如果在容器中没有数据源,下面代码生效,也就是使用hikaridatasource,但是若容器中已经有开发者创建的数据源,那么开发者创建的优先。
在使用数据源的时候,不可避免地需要配置基本的属性,如:url、用户名、密码、端口号等。所以我们可以将这些信息抽取出来,放到配置文件中,
这里我们采用yaml写法application.yaml:spring:
datasource:
url: jdbc:mysql://localhost:3306/vuesite
username: root
password: 123456
driver-class-name: com.mysql.jdbc.driver
使用configurationproperties注解来进行属性的绑定:package com.xbhog.config;
import com.alibaba.druid.pool.druiddatasource;
import org.springframework.boot.context.properties.configurationproperties;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import javax.sql.datasource;
@configuration
//配置数据源
public class mydtasourceconfig {
@configurationproperties("spring.datasource") //属性绑定 要加对位置
@bean
public datasource datasource() {
druiddatasource druiddatasource = new druiddatasource();
return druiddatasource;
}
}
进行单元测试:package com.xbhog;
import lombok.extern.slf4j.slf4j;
import org.junit.jupiter.api.test;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.context.springboottest;
import org.springframework.jdbc.core.jdbctemplate;
import javax.sql.datasource;
@springboottest
@slf4j
class firstadminapplicationtests {
@autowired
datasource datasource;
@test
void contextloads() {
log.info("数据类型:{}",datasource.getclass());
}
}
结果==> 数据类型:class com.alibaba.druid.pool.druiddatasource
具体的配置绑定:个人博客
druid中的其他功能
配置监控页:
贴心文档链接:网页地址
我们需要配置一个servlet配置,然后放到容器中,输入账号密码,进入链接地址即可访问;
在配置数据源代码下:/**
* 配置监控页
*/
@bean
public servletregistrationbean staviewservlet(){
//实例化statviewservlet
statviewservlet statviewservlet = new statviewservlet();
//将实例化的实例化statviewservlet 传入servletregistrationbean,并设置访问路径
servletregistrationbean<statviewservlet> registrationbean = new servletregistrationbean<>(statviewservlet, "/druid/*");
return registrationbean;
}
结果:
开启登录功能:
因为登录设置还是在servlet中设置的,所以相关信息暂略,贴一个文档截图:
代码添加:@bean
public servletregistrationbean staviewservlet(){
statviewservlet statviewservlet = new statviewservlet();
servletregistrationbean<statviewservlet> registrationbean = new servletregistrationbean<>(statviewservlet, "/druid/*");
//配置登录信息
registrationbean.addinitparameter("loginusername","admin");
registrationbean.addinitparameter("loginpassword","123456");
return registrationbean;
}
结果:
打开监控统计功能:
测试sql监控功能。
网页地址:
创建一个druiddatasource组件,并配置其中的属性filters的value为stat,这样才能打开监控功能。
所以我们在创建数据源的地方需要配置filters属性:public class mydtasourceconfig {
@configurationproperties("spring.datasource")
@bean
public datasource datasource() throws sqlexception {
druiddatasource druiddatasource = new druiddatasource();
//加入监控功能
druiddatasource.setfilters("stat");
return druiddatasource;
}
}
也可以进行属性的配置来实现上述的效果:(第二种方法)spring:
datasource:
url: jdbc:mysql://localhost:3306/vuesite
username: root
password: 123456
driver-class-name: com.mysql.jdbc.driver
filters: stat
tomcat:
max-active: 12
然后设置一个请求,来测试监控功能;
创建一个controller:@controller
public class tablecontro {
@autowired
jdbctemplate jdbctemplate;
@responsebody //不经过视图解析器
@getmapping("/sql")
public string druidquery(){
long along = jdbctemplate.queryforobject("select count(*) from user",long.class);
return along.tostring();
}
}
先访问localhost:8080/sql,然后进入http://localhost:8080/druid/index.html页面中的sql监控,即可查看执行次数次数。
在最大并发的后面的有各种分布,可以参考官方文档:druid连接池介绍
开启web应用功能:
基本上还是跟上面一样的;
webstatfilter用于采集web-jdbc关联监控的数据。
网页地址
配置一个webstatfilter,然后需要初始化exclusions,来排除一些不必要的url.得先进行sql的请求/**
* webstatfilter用于采集web-jdbc关联监控的数据。
*/
@bean
public filterregistrationbean webregistrationbean(){
webstatfilter webstatfilter = new webstatfilter();
filterregistrationbean<webstatfilter> registrationbean = new filterregistrationbean<>(webstatfilter);
registrationbean.seturlpatterns(arrays.aslist("/*"));
//添加一些不必要的ulr,在初始化的时候就执行
registrationbean.addinitparameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return registrationbean;
}
结果:
web应用:
url监控
配置防火墙:
wallfilter
所以我们可以结合filter一起使用,代码如下:得先进行sql的请求。public class mydtasourceconfig {
@configurationproperties("spring.datasource")
@bean
public datasource datasource() throws sqlexception {
druiddatasource druiddatasource = new druiddatasource();
//加入监控功能
druiddatasource.setfilters("stat,wall");
return druiddatasource;
}
}
结果:
参考文献
Druid官方github地址
Druid中文文档
引用
SpringBoot2零基础入门springboot全套完整版
结束:
如果你看到这里或者正好对你有所帮助,希望能点个关注或者推荐,感谢;
有错误的地方,欢迎在评论指出,作者看到会进行修改。
到此这篇关于springboot数据访问自定义使用druid数据源的方法的文章就介绍到这了,更多相关springboot数据访问使用druid数据源内容请搜索CodeAE代码之家 以前的文章或继续浏览下面的相关文章希望大家以后多多支持CodeAE代码之家!
原文链接:https://www.cnblogs.com/xbhog/p/15108549.html