SpringBoot整合阿里 Druid 数据源的实例详解

 更新时间:2022年11月12日 09:55:34   作者:刘婉晴  
这篇文章主要介绍了SpringBoot整合阿里 Druid 数据源,主要讲解了手动配置方法,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

前言:今年是我的第二个 1024 了 ,和我一起大声说出来,技术宅改变世界!!!

本节主要介绍的是:SpringBoot 整合阿里 Druid 数据源手动配置方法

1. 在容器中注册 DruidDataSource 数据源。

编写数据源配置类 MyDataSourseConfig.class,并在容器中注册 DruidDataSource 数据源。

代码示例如下:

@Configuration
public class MyDataSourseConfig {
    @Bean
    @ConfigurationProperties("spring.datasource") // 属性与配置文件绑定
    public DataSource dataSource(){
        return new DruidDataSource();
    }
}

2. Druid 数据源各种属性配置方法

方法一(不推荐): 直接在配置类中通过为自定义的 DruidDataSource 组件 通过 set 设置各种属性,来实现数据源的配置。

代码示例如下:

@Configuration
public class MyDataSourseConfig {
    @Bean
    public DataSource dataSource(){
        
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl("jdbc:mysql://localhost:3306/practice"); // 设置数据源连接 url
        // ..... 设置其他属性 .....
        return druidDataSource;
    }
}

这种方法当修养属性值时,需要大量修改源代码,因此不推荐。

方法二(推荐):通过 @ConfigurationProperties(“spring.datasource”) 注释将组件与配置文件中的 spring.datasource 项绑定,这样在修改自定义数据源属性时,直接在 application.yaml 文件的 spring.datasource 配置项下修改即可。代码示例如下:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/practice
    username: root
    password: 5201314love
    driver-class-name: com.mysql.jdbc.Driver

可通过自定义数据源组件注册到容器中修改默认数据源原理:

DataSourceAutoConfiguration.class 数据源自动配置类中,有如下设置。其表示容器中没有数据源,才自动配置 Hikari 数据源。若有数据源则使用容器中的数据源。

3. 开启Druid的内置监控页面

在容器中放一 Servlet ,具体操作方法为在 Druid数据源 配置类中注册一ServletRegistrationBean 组件到容器,ServletRegistrationBean 的Servlet 类型为 StatViewServlet 。代码示例如下:

注意点:访问的 url 为 "/druid/*" ,是一个 * 而不是双 **

@Configuration
public class MyDataSourseConfig {
    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSource(){
        return new DruidDataSource();
    }

    // 配置 druid 监控页功能 —— 在容器中放一 Servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<StatViewServlet>(statViewServlet, "/druid/*");
        return registrationBean;
    }
}

4. 打开 Druid 监控统计功能

只是开启了监控页功能并不能让我们使用 Druid 为我们提供的 SQL 监控等功能。还需要为数据源配置 StatFilter,具体方法是通过 setFilters(“stat”) 方法配置。代码如下:

    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        // 加入监控功能 —— setFilters("stat");
        druidDataSource.setFilters("stat");
        return druidDataSource;
    }

这时我们再去访问数据库,可以发现SQL监控功能可用了

5. 配置Web和Spring关联监控

在容器中注册一 WebStatFilter ,通过 setUrlPatterns(Arrays.asList(“/*”) 设置监控的请求为 /** 请求。具体代码实现如下:

    // 采集 web-jdbc 关联监控的数据
    @Bean
    public FilterRegistrationBean webstatFilter(){
        WebStatFilter webStatFilter = new WebStatFilter();

        FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>(webStatFilter);
        registrationBean.setUrlPatterns(Arrays.asList("/*"));
        registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return registrationBean;
    }

6. 配置防火墙:

在数据源中通过 setFilter(“wall”) 加入 防火墙配置 (setFilter 多个值用逗号隔开)

        // 加入监控功能
        druidDataSource.setFilters("stat, wall");

小优化:
所有通过 setXXXX() 设置数据源的,都可以在配置文件中写,因为 druidDataSource 已经绑定了 spring.datasource 配置项

例如:

druidDataSource.setFilters("stat, wall");

可优化为:

spring:
  datasource:
    # ... 此处省略一堆其他配置....
    filters: stat,wall

7. 给监控页加入账号密码

在 ServletRegistrationBean 中通过 addInitParameter 加入账号密码的设置

    // 配置 druid 监控页功能 —— 在容器中放一 Servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<StatViewServlet>(statViewServlet, "/druid/*");
        registrationBean.addInitParameter("loginUsername", "wanqing");
        registrationBean.addInitParameter("loginPassword", "520131");
        return registrationBean;
    }

到此这篇关于SpringBoot整合阿里 Druid 数据源的文章就介绍到这了,更多相关SpringBoot整合Druid 数据源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详细盘点Java中锁的分类

    详细盘点Java中锁的分类

    这篇文章主要介绍了详细盘点Java中锁的分类,Java中的锁是一种多线程编程中的同步机制,用于控制线程对共享资源的访问,防止并发访问时的数据竞争和死锁问题,需要的朋友可以参考下
    2023-08-08
  • 编写android拨打电话apk应用实例代码

    编写android拨打电话apk应用实例代码

    这篇文章主要介绍了编写android拨打电话apk应用实例代码,十分的实用,这里分享给大家,有需要的小伙伴可以参考下
    2015-04-04
  • SpringCache缓存自定义配置的实现

    SpringCache缓存自定义配置的实现

    本文主要介绍了SpringCache缓存自定义配置的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • springcloud gateway无法路由问题的解决

    springcloud gateway无法路由问题的解决

    gateway网关的重要作用之一便是进行路由转发工作,下面这篇文章主要给大家介绍了关于springcloud gateway无法路由问题的解决方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Java中枚举的实现原理介绍

    Java中枚举的实现原理介绍

    大家好,本篇文章主要讲的是Java中枚举的实现原理介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • java实现五子棋程序

    java实现五子棋程序

    这篇文章主要为大家详细介绍了java实现五子棋程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Java中WeakHashMap的回收问题详解

    Java中WeakHashMap的回收问题详解

    这篇文章主要介绍了Java中WeakHashMap的回收问题详解,WeakHashMap弱键大致上是通过WeakReference和ReferenceQueue实现,WeakHashMap的key是"弱键",即是WeakReference类型的,ReferenceQueue是一个队列,它会保存被GC回收的"弱键",需要的朋友可以参考下
    2023-09-09
  • IntelliJ IDEA中Project与Module的概念以及区别

    IntelliJ IDEA中Project与Module的概念以及区别

    这篇文章主要给大家介绍了关于IntelliJ IDEA中Project与Module的概念以及区别的相关资料,文中通过实例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 关于Java如何用好线程池的方法分享(建议收藏)

    关于Java如何用好线程池的方法分享(建议收藏)

    这篇文章主要来和大家分享几个关于Java如何用好线程池的建议,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2023-06-06
  • Spring boot整合ELK详细过程

    Spring boot整合ELK详细过程

    ELK是由Elasticsearch、Logstash和Kibana三个开源软件组成的技术堆栈,主要用于数据的存储、处理和可视化,本文给大家介绍Spring boot整合ELK详细过程,感兴趣的朋友一起看看吧
    2024-01-01

最新评论