Springboot 2.x 使用 Druid 数据源
一、Druid 数据源
访问Druid github 官方地址: https://github.com/alibaba/druid
拖到最后,可以找到 Druid 使用的相关文档
二、如何使用 Druid 数据源
2.1、引入 Maven 依赖
1 2 3 4 5 | <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version> 1.1 . 21 </version> </dependency> |
2.2、自定义配置类,并且往容器中注入 DruidDataSource 组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @Configuration public class DruidConfig { @Bean public DruidDataSource dataSource() { DruidDataSource druid = new DruidDataSource(); druid.setUsername( "root" ); druid.setPassword( "root" ); druid.setUrl( "jdbc:mysql://localhost:3306/jdbcdemo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC" ); druid.setDriverClassName( "com.mysql.cj.jdbc.Driver" ); return druid; } } |
2.3、测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @SpringBootTest class DatasourceApplicationTests { // 更换为 Druid 数据源 @Autowired DataSource dataSource; // 默认配置了 JdbcTemplate @Autowired JdbcTemplate jt; @Test void contextLoads() { System.out.println( "现在的数据源是: " + dataSource.getClass()); System.out.println( "默认配置了: " + jt.getClass()); List<Map<String, Object>> maps = jt.queryForList( "select * from user" ); System.out.println(maps); } } |
2.4、测试结果
从上面的例子中我们发现,我们并未在 application.properties 中配置任何信息,为什么新加入的数据源就起效了呢?
三、Druid 配置原理
我们在 Springboot 的 DataSourceAutoConfiguration 类中可以看到如下声明
也就是只要我向 IOC 容器中注入了 DataSource ,那么 Springboot 就不会再导入 Hikari、Tomcat 等数据源,并且它会从容器中找到 DataSource ,然后使用该数据源.
从上面的数据源配置类中看到,一个数据源能设置的属性还是非常多的,如果都写在代码里面,会让整个代码显得很臃肿,并且如果我们需要修改某一个属性的值时,必须要改动代码才有效,这样就很不合理,那么怎么改进呢?我们可以将其写入 application.properties 中,只需要使用 @ConfigurationProperties注解就可以了
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 public class DruidConfig { @Bean // 将 application.properties 中以 spring.dataSource 开头的配置项的值赋值给 DruidDataSource 中对应的属性 // 例如 spring.datasource.username=root 就等价于给 dataSource 这个对象的 username 属性赋值 @ConfigurationProperties (prefix= "spring.datasource" ) public DruidDataSource dataSource() { DruidDataSource druid = new DruidDataSource(); return druid; } } // application.properties 配置文件内容 # 用户名 spring.datasource.username=root # 密码 spring.datasource.password=root # mysql 数据库 URL spring.datasource.url=jdbc:mysql: //localhost:3306/jdbcdemo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC # mysql 驱动 (mysql 8 .x 版本的使用 com.mysql.cj.jdbc.Driver # 5 .x 版本的使用的是 com.mysql.jdbc.Driver # 使用 spring.datasource.driver- class -name 也是一样的,点击这个属性,会跳到同一个位置 spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver # 进行数据库链接池的配置,数据库最小维持连接数 spring.datasource.dbcp2.min-idle= 1 # 数据库初始化提供的连接数 spring.datasource.dbcp2.initial-size= 1 # 数据库最大维持连接数 spring.datasource.dbcp2.max-total= 1 # 等待连接获取的最大超时时间 |
注意:我这里的 application.properties 中并没有使用 spring.datasource.type 来指定数据源的类型,因为数据源是我们手动注入到 IOC 容器中的,如果是 starter 方式引入 Druid 数据源,则需要该属性来指定
1 2 | # 配置当前要使用的数据源的操作类型 # spring.datasource.type=com.alibaba.druid.pool.DruidDataSource |
四、开启 Druid 监控相关的功能
具体可以参考: https://github.com/alibaba/druid/wiki/常见问题
按照自己的需求来配置对应的功能
例如下面的配置
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 34 35 36 37 | @Configuration public class DruidConfig { @Bean @ConfigurationProperties (prefix = "spring.datasource" ) public DruidDataSource dataSource() { DruidDataSource druid = new DruidDataSource(); return druid; } @Bean // Druid 内置提供了一个 StatViewServlet 用于展示 Druid 的统计信息 public ServletRegistrationBean statViewServlet() { ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean( new StatViewServlet(), "/druid/*" ); HashMap<String, Object> map = new HashMap<>(); map.put( "loginUsername" , "admin" ); map.put( "loginPassword" , "admin" ); //map.put("resetEnable", true); map.put( "allow" , "" ); servletRegistrationBean.setInitParameters(map); return servletRegistrationBean; } //2、配置一个 web 监控的 filter @Bean public FilterRegistrationBean webStatFilter() { FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter( new WebStatFilter()); Map<String, String> initParams = new HashMap<>(); initParams.put( "exclusions" , "*.js,*.css,/druid/*" ); bean.setInitParameters(initParams); bean.setUrlPatterns(Arrays.asList( "/*" )); return bean; } } |
配置完成之后,浏览器访问: http://localhost:8080/druid/
便会来到登录页面,输入我们配置的 用户名/密码
Sign in 登录跳转到主页
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?