SpringBoot 自动集成starter使用实例,SpringBoot自定义集成Druid。Apache Druid是一个高性能的实时分析数据库。
druid官网
1、druid简介

2、页面展示
集成后访问链接127.0.0.1:8080/druid


3、手动集成
创建一个SpringBoot项目,按照SpringBoot常规的三个步骤进行
1. 引入依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.3</version> </dependency>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
|
2. 添加配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| spring: datasource: username: root password: xxxx url: jdbc:mysql://192.168.88.88:3306/springboot_mybatis?characterEncoding=utf8&useSSL=false&serverTimezone=UTC& driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource initialSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true filters: stat,wall maxPoolPreparedStatementPerConnectionSize: 20 useGlobalDataSourceStat: true connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500 schema: classpath:sql/schema.sql initialization-mode: always
|
3. 添加注解/业务逻辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| @Configuration @ConditionalOnProperty("spring.datasource.type") public class DruidConfiguration { @Bean public DataSource dataSource(DataSourceProperties properties){ return properties.initializeDataSourceBuilder().build(); } @Bean public ServletRegistrationBean statViewServlet() { ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(); servletRegistrationBean.setServlet(new StatViewServlet()); servletRegistrationBean.addUrlMappings("/druid/*"); servletRegistrationBean.addInitParameter("allow", "127.0.0.1"); servletRegistrationBean.addInitParameter("loginUsername", "admin"); servletRegistrationBean.addInitParameter("loginPassword", "123456"); servletRegistrationBean.addInitParameter("resetEnable", "false"); return servletRegistrationBean; } @Bean public FilterRegistrationBean statFilter() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new WebStatFilter()); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*,"); return filterRegistrationBean; } }
|
4、Data Source数据注入
1. @ConfigurationProperties
注解
- 该注解可以使用在类上,则该类下对应的属性会自动注入配置文件中配置信息
- 同样该类也可以使用在方法上,在方法中new 对象同样可以自动注入,前提是该方法必须注册为Bean对象(即添加@Bean注解)
1 2 3 4 5 6 7 8 9 10
| @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource(DataSourceProperties properties){ return new DruidDataSource(); }
|
2.DataSourceProperties
DataSourceProperties
对象提供的方法initializeDataSourceBuilder
配置文件中的属性都是引用的该方法,initializeDataSourceBuilder
的作用就是帮我们去构建一个DataSource
对象。该方法采用了建造者的设计模式,一般建造者模式都有一个build方法创建相应对象。
- 此方法为
DataSourceProperties
独有的方法
1 2 3 4 5
| @Bean public DataSource dataSource(DataSourceProperties properties){ return properties.initializeDataSourceBuilder().build(); }
|
5、配置类注解说明
- @Configuration:标注当前类为配置类,SpringBoot启动扫描就可以扫描到当前类
@ConditionalOnProperty("spring.datasource.type")
: 配置当前对象必须在配置spring.datasource.type后该类才会生效
- 两个注解在SpringBoot的各个Starter中是不可或缺的
6、官方Starter
经过上面的一番配置,我们实现了想要的功能,我们实现的功能也就是Druid Starter中所具备的功能,接下来我们在有上面自定义配置的基础上看下官方提供的Starter又是如何实现的呢?
1. 添加注解
1 2 3 4 5 6 7 8 9 10 11 12
|
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency>
|
2. 添加配置
1 2 3 4 5 6 7 8 9 10 11
| spring: datasource: druid: stat-view-servlet: enabled: true login-username: admin loginPassword: 123456 web-stat-filter: enabled: true
|
同我们手动配置时一样,配置
- 开启druid监控台
- 启用druid监控filter
3. 注释自定义配置
1 2 3
|
public class DruidConfiguration {
|
注释掉自定义配置,则我们的自定义配置则全部不会生效。
4. 启动项目
此时启动项目,durid控制台依然是可以正常访问的。这样我们就可以很好的理解和体会SpringBoot的开箱即用
5. Starter配置文件
使用我们学到了,具体的Starter中又是如何配置的呢,看配置


从这我们可以看出我们配置文件中配置的开启druid控制台,必须配置spring.datasource.druid.stat-view-servlet.enabled
属性为true,才可以生效

配置druid拦截器,都也是同样的原理
7、总结
通过durid这个插件,自定义与SpringBoot集成以及直接引入Starter两种方式,体验Springboot将我们常用的场景抽取成starter(场景启动器)后给我们带来的便利。体验SpringBoot的开箱即用的便捷的同时,又了解starter具体的实现原理,让我们不至于成为一个简单的操作机器,知其然而知其所以然。
Copyright 2021 sunfy.top ALL Rights Reserved