SpringBoot整合阿里 Druid 数据源的实例详解
刘婉晴 人气:0前言:今年是我的第二个 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; }
加载全部内容