SpringBoot中怎么使用Druid数据源,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
数据访问之Druid数据源的使用
说明:该数据源Druid,使用自定义方式实现,后面文章使用start启动器实现,学习思路为主。
为什么要使用数据源:
数据源是提高数据库连接性能的常规手段,数据源会负责维持一个数据连接池,当程序创建数据源实例时,系统会一次性地创建多个数据库连接,并把这些数据库连接保存在连接池中。
当程序需要进行数据库访问时,无须重新获得数据库连接,而是从连接池中取出一个空闲的数据库连接。
当程序使用数据库连接访问数据库结束后,无须关闭数据库连接,而是将数据库连接归还给连接池即可。
通过这种方式,就可避免频繁地获取数据库连接、关闭数据库连接所导致的性能下降
为什么要使用数据源
数据源是提高数据库连接性能的常规手段,数据源会负责维持一个数据连接池,当程序创建数据源实例时,系统会一次性地创建多个数据库连接,并把这些数据库连接保存在连接池中。当程序需要进行数据库访问时,无须重新获得数据库连接,而是从连接池中取出一个空闲的数据库连接。当程序使用数据库连接访问数据库结束后,无须关闭数据库连接,而是将数据库连接归还给连接池即可。通过这种方式,就可避免频繁地获取数据库连接、关闭数据库连接所导致的性能下降。
Druid官方github地址
Druid中文文档
Druid的介绍以及优点:
Druid是阿里巴巴开源平台上一个数据库连接池实现,它不但结合了C3P0、DBCP、PROXOOL等数据库连接池的优点,同时还加入了日志监控,可以分别监控DB池连接和SQL的执行情 况,是一款针对监控而生的数据库连接池
整合第三方技术的两种方式
自定义
找starter
自定义实现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@Slf4jclass FirstAdminApplicationTests { @Autowired DataSource dataSource; @Test void contextLoads() { log.info("数据类型:{}",dataSource.getClass()); }}
结果==> 数据类型:class com.alibaba.druid.pool.DruidDataSource
具体的配置绑定:个人博客
Druid中的其他功能
配置监控页:
贴心文档链接:网页地址
我们需要配置一个servlet配置,然后放到容器中,输入账号密码,进入链接地址即可访问;
在配置数据源代码下:
@Beanpublic ServletRegistrationBean staViewServlet(){ //实例化StatViewServlet StatViewServlet statViewServlet = new StatViewServlet(); //将实例化的实例化StatViewServlet 传入ServletRegistrationBean,并设置访问路径 ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(statViewServlet, "/druid@Beanpublic 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; }}
结果:
关于SpringBoot中怎么使用Druid数据源问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。