文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot中怎么使用Druid数据源

2023-06-20 20:51

关注

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@Slf4jclass FirstAdminApplicationTests {    @Autowired    DataSource dataSource;        @Test    void contextLoads() {        log.info("数据类型:{}",dataSource.getClass());    }}

结果==> 数据类型:class com.alibaba.druid.pool.DruidDataSource

具体的配置绑定:个人博客

Druid中的其他功能

配置监控页:

贴心文档链接:网页地址

SpringBoot中怎么使用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应用:

SpringBoot中怎么使用Druid数据源

URL监控

SpringBoot中怎么使用Druid数据源

配置防火墙:

wallfilter

SpringBoot中怎么使用Druid数据源

所以我们可以结合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数据源

关于SpringBoot中怎么使用Druid数据源问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯