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

作者:刘婉晴 时间:2021-07-28 17:50:32 

前言:今年是我的第二个 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 数据源。若有数据源则使用容器中的数据源。

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

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(&ldquo;stat&rdquo;) 方法配置。代码如下:

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

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

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

5. 配置Web和Spring关联监控

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

// 采集 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(&ldquo;wall&rdquo;) 加入 防火墙配置 (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;
   }

来源:https://blog.csdn.net/liuwanqing233333/article/details/127448926

标签:SpringBoot,Druid,数据源
0
投稿

猜你喜欢

  • idea的使用之关于tomcat热部署的教程

    2022-12-02 20:16:46
  • C# 中string.split用法详解

    2023-04-09 13:58:34
  • Android图片色彩变换实现方法

    2022-03-21 07:23:32
  • C#实现翻转字符串的方法

    2021-11-23 11:51:48
  • Java将byte[]转图片存储到本地的案例

    2021-08-30 08:19:12
  • 使用Java代码来比较Android客户端版本号

    2021-09-07 17:44:22
  • Spring boot 集成Dubbox的方法示例

    2023-09-22 23:49:04
  • Android 仿QQ头像自定义截取功能

    2023-05-14 00:13:21
  • java自带的MessageDigest实现文本的md5加密算法

    2023-10-08 03:35:29
  • 浅谈Java字符串比较的三种方法

    2023-05-13 12:26:51
  • Android仿支付宝上芝麻信用分雷达图

    2023-04-21 18:44:30
  • java源码解析之String类的compareTo(String otherString)方法

    2023-11-11 23:10:00
  • SpringBoot修改子模块Module的jdk版本的方法 附修改原因

    2023-07-23 21:05:20
  • Spring高阶用法之自定义业务对象组件化

    2022-02-18 07:48:55
  • Android开发中多进程共享数据简析

    2023-10-10 05:17:04
  • SWT(JFace) Menu、Bar...体验代码

    2022-01-29 08:34:46
  • Java实战之实现用户登录

    2022-08-03 14:42:55
  • 浅谈Java中ThreadLocal内存泄露的原因及处理方式

    2021-06-12 21:08:37
  • C#判断字符串中是否包含指定字符串及contains与indexof方法效率问题

    2022-07-06 19:04:51
  • C#实现剪切板功能

    2023-01-16 12:26:48
  • asp之家 软件编程 m.aspxhome.com