• SpringBoot配置Druid


    目录

    一、JDBC连接数据库

    1. 创建项目,导入需要的依赖

    2. 配置数据源

    3. 测试连接

    4. 项目启动成功,能够看出连接信息

    二、配置数据库连接池Druid

    1. 添加druid的maven配置

    2. 添加数据源的配置

    3. 重新执行测试代码,发现数据库连接池已经更改

    4. 添加Druid其他增强的配置

    5. 写配置类加载Druid的配置

    6. 引入log4j的依赖

    7. 测试一下数据库连接

    8. 查看控制台的监控信息


    Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。

    Druid 是一个 JDBC 组件库,包含数据库连接池、SQL Parser 等组件, 被大量业务和技术产品使用或集成,经历过最严苛线上业务场景考验,是你值得信赖的技术产品。

    一、JDBC连接数据库

    1. 创建项目,导入需要的依赖

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-jdbcartifactId>
    4. dependency>
    5. <dependency>
    6. <groupId>mysqlgroupId>
    7. <artifactId>mysql-connector-javaartifactId>
    8. <scope>runtimescope>
    9. dependency>

    2. 配置数据源

    1. server:
    2. port: 8085
    3. spring:
    4. application:
    5. name: user-service
    6. datasource:
    7. driver-class-name: com.mysql.jdbc.Driver
    8. url: jdbc:mysql://localhost:3306/hm49?serverTimezone=UTC&useUnicode=true@characterEncoding=utf-8
    9. username: root
    10. password: root

    3. 测试连接

    1. import org.junit.jupiter.api.Test;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.boot.test.context.SpringBootTest;
    4. import javax.sql.DataSource;
    5. import java.sql.Connection;
    6. import java.sql.SQLException;
    7. @SpringBootTest
    8. class DataApplicationTests {
    9. @Autowired
    10. DataSource dataSource;
    11. /**
    12. * 验证数据库连接
    13. * @throws Exception
    14. */
    15. @Test
    16. void testConnection() throws Exception {
    17. System.out.println(dataSource.getClass());
    18. Connection connection = dataSource.getConnection();
    19. System.out.println(connection);
    20. connection.close();
    21. }
    22. /**
    23. * 验证连接池的配置信息,是否生效
    24. * @throws Exception
    25. */
    26. /*@Test
    27. void contextLoads() throws Exception {
    28. System.out.println(dataSource.getClass());
    29. DruidDataSource druidDataSource = (DruidDataSource) dataSource;
    30. System.out.println("initSize:" + druidDataSource.getInitialSize());
    31. System.out.println("maxSize:" + druidDataSource.getMaxActive());
    32. Connection connection = dataSource.getConnection();
    33. System.out.println(connection);
    34. connection.close();
    35. }*/
    36. }

    4. 项目启动成功,能够看出连接信息

          默认配置的数据源为class com.zaxxer.hikari.HikariDataSource

    二、配置数据库连接池Druid

    1. 添加druid的maven配置

    1. <dependency>
    2. <groupId>com.alibabagroupId>
    3. <artifactId>druidartifactId>
    4. <version>1.1.12version>
    5. dependency>

    2. 添加数据源的配置

    1. server:
    2. port: 8085
    3. spring:
    4. application:
    5. name: user-service
    6. datasource:
    7. driver-class-name: com.mysql.jdbc.Driver
    8. url: jdbc:mysql://localhost:3306/hm49?serverTimezone=UTC&useUnicode=true@characterEncoding=utf-8
    9. username: root
    10. password: root
    11. type: com.alibaba.druid.pool.DruidDataSource

    3. 重新执行测试代码,发现数据库连接池已经更改

          此时配置的数据源为com.alibaba.druid.pool.DruidDataSource

    4. 添加Druid其他增强的配置

    官网介绍如下:常见问题 · alibaba/druid Wiki · GitHub

    1. server:
    2. port: 8085
    3. spring:
    4. application:
    5. name: user-service
    6. datasource:
    7. driver-class-name: com.mysql.jdbc.Driver
    8. url: jdbc:mysql://localhost:3306/hm49?serverTimezone=UTC&useUnicode=true@characterEncoding=utf-8
    9. username: root
    10. password: root
    11. type: com.alibaba.druid.pool.DruidDataSource
    12. #Spring Boot 默认是不注入这些属性值的,需要自己绑定
    13. #druid 数据源专有配置
    14. initialSize: 5
    15. minIdle: 5
    16. maxActive: 20
    17. maxWait: 60000
    18. timeBetweenEvictionRunsMillis: 60000
    19. minEvictableIdleTimeMillis: 300000
    20. validationQuery: SELECT 1 FROM DUAL
    21. testWhileIdle: true
    22. testOnBorrow: false
    23. testOnReturn: false
    24. poolPreparedStatements: true
    25. #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
    26. #如果允许时报错 java.lang.ClassNotFoundException: org.apache.log4j.Priority
    27. #则导入 log4j 依赖即可,Maven 地址: https://mvnrepository.com/artifact/log4j/log4j
    28. filters: stat,wall,log4j
    29. maxPoolPreparedStatementPerConnectionSize: 20
    30. useGlobalDataSourceStat: true
    31. connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
    32. #第一步连接数据库
    33. #第二步配置连接池+type
    34. #第三部测试查询jdbcTemplate.queryForList(sql);
    35. #第四部添加连接池配置

    5. 写配置类加载Druid的配置

    1. import com.alibaba.druid.pool.DruidDataSource;
    2. import com.alibaba.druid.support.http.StatViewServlet;
    3. import com.alibaba.druid.support.http.WebStatFilter;
    4. import org.springframework.boot.context.properties.ConfigurationProperties;
    5. import org.springframework.boot.web.servlet.FilterRegistrationBean;
    6. import org.springframework.boot.web.servlet.ServletRegistrationBean;
    7. import org.springframework.context.annotation.Bean;
    8. import org.springframework.context.annotation.Configuration;
    9. import javax.servlet.Servlet;
    10. import javax.sql.DataSource;
    11. import java.util.Arrays;
    12. import java.util.HashMap;
    13. import java.util.Map;
    14. import com.alibaba.druid.pool.DruidDataSource;
    15. import org.springframework.boot.context.properties.ConfigurationProperties;
    16. import org.springframework.context.annotation.Bean;
    17. import org.springframework.context.annotation.Configuration;
    18. @Configuration
    19. public class DruidConfig {
    20. @ConfigurationProperties(prefix = "spring.datasource")
    21. @Bean
    22. public DataSource druidDataSource(){
    23. return new DruidDataSource();
    24. }
    25. @Bean
    26. public ServletRegistrationBean druidServletRegistrationBean(){
    27. ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");
    28. Map initParams = new HashMap<>();
    29. initParams.put("loginUsername","admin");
    30. initParams.put("loginPassword","123456");
    31. //后台允许谁可以访问
    32. //initParams.put("allow", "localhost"):表示只有本机可以访问
    33. //initParams.put("allow", ""):为空或者为null时,表示允许所有访问
    34. initParams.put("allow","");
    35. //deny:Druid 后台拒绝谁访问
    36. // initParams.put("msb", "192.168.1.20");//表示禁止此ip访问
    37. servletRegistrationBean.setInitParameters(initParams);
    38. return servletRegistrationBean;
    39. }
    40. //配置 Druid 监控 之 web 监控的 filter
    41. //WebStatFilter:用于配置Web和Druid数据源之间的管理关联监控统计
    42. @Bean
    43. public FilterRegistrationBean webStatFilter() {
    44. FilterRegistrationBean bean = new FilterRegistrationBean();
    45. bean.setFilter(new WebStatFilter());
    46. //exclusions:设置哪些请求进行过滤排除掉,从而不进行统计
    47. Map initParams = new HashMap<>();
    48. initParams.put("exclusions", "*.js,*.css,/druid/*");
    49. bean.setInitParameters(initParams);
    50. //"/*" 表示过滤所有请求
    51. bean.setUrlPatterns(Arrays.asList("/*"));
    52. return bean;
    53. }
    54. }

    6. 引入log4j的依赖

    1. <dependency>
    2. <groupId>log4jgroupId>
    3. <artifactId>log4jartifactId>
    4. <version>1.2.17version>
    5. dependency>

    7. 测试一下数据库连接

    1. import org.springframework.beans.factory.annotation.Autowired;
    2. import org.springframework.jdbc.core.JdbcTemplate;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.RestController;
    6. import java.util.List;
    7. @RestController
    8. public class JDBCController {
    9. @Autowired
    10. JdbcTemplate jdbcTemplate;
    11. @RequestMapping("selectAll")
    12. public List> selectAll(){
    13. String sql = "select * from tb_user";
    14. List> maps = jdbcTemplate.queryForList(sql);
    15. return maps;
    16. }
    17. }

    8. 查看控制台的监控信息

    http://localhost:8085/druid/login.html

    如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏

  • 相关阅读:
    ubuntu20.04版本安装教程
    科学家首次为地球“全面体检”;国产光刻机或系误传;推特或将按月收费丨RTE开发者日报 Vol.52
    HTML+CSS美食静态网站设计【海鲜网站】web结课作业的源码 web网页设计实例作业
    [蓝桥杯-610]分数
    MobPush丨 iOS端快速集成方法
    Unity用爬虫做一个火车购票系统
    深度学习之基于YoloV5交通信号标志识别系统
    Causality
    22-09-19 西安 谷粒商城(03)分布式锁、ab测试、LUA脚本、看门狗自动续期
    工业RFID读写器选择指南
  • 原文地址:https://blog.csdn.net/promsing/article/details/126446143