SpringBoot整合Druid配置数据源监控

简介: 我们在进行数据访问声明模板和repository之前都需要配置数据源用来连接数据库。数据源就是连接到数据库的一条路径,数据源中并无真正的数据,它仅仅记录的是你连接到哪个数据库,以及如何连接。

前言


我们在进行数据访问声明模板和repository之前都需要配置数据源用来连接数据库。数据源就是连接到数据库的一条路径,数据源中并无真正的数据,它仅仅记录的是你连接到哪个数据库,以及如何连接。


常见的数据源有很多,比如dbcp,c3p0,druid。目前很多公司使用的是阿里巴巴开源的Druid数据源,因为该数据源不仅能够进行数据访问并且有成套的数据源以及安全监控。接下来就通过SpringBoot整合Druid数据源,并配置对数据源的监控。


实战


首先需要新建一个springboot项目,如何新建springboot项目可以参考之前的文章:SpringBoot入门:使用IDEA和Eclipse构建第一个SpringBoot项目,这里需要的依赖文件的配置如下:


<!--引入druid数据源-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.8</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<!--引入log4jlog4j日志-->
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
</dependencies>
复制代码


关于druid数据源的依赖可以去网址:mvnrepository.com/artifact/co…


接下来新建个配置文件格式为yml格式,配置进行数据访问所需要的一些配置信息,下面是整个的yml配置文件的配置信息,具体的参数的信息如注释所示:


spring:
  datasource:
    #用户名
    username: root
    #密码
    password: 123456
    #数据库的url
    url: jdbc:mysql://localhost:3306/jdbc?serverTimezone=Asia/Shanghai
    #驱动名称   
    driver-class-name: com.mysql.cj.jdbc.Driver
    #对象的类型,这里是druid数据源
    type: com.alibaba.druid.pool.DruidDataSource
    #初始化连接数:默认值 0
    initialSize: 5
    #最小空闲连接数,默认值 0,当高峰期过后,连接使用的少了,但是连接池还是会为你留着minIdle的连接,以备高峰期再次来临的时候不需要创建连接当高峰期过后,连接使用的少了,但是连接池还是会为你留着minIdle的连接,以备高峰期再次来临的时候不需要创建连接 
    minIdle: 5
    #最大活跃连接数,这个数字不宜设置过大,太多的并发连接对数据库的压力很大,甚至会导致雪崩,这是一定要注意的。但是如果设置过小,而应用的服务线程数有很高,可能会导致有的服务线程拿不到连接,所以服务的线程数和数据库连接数是需要经过配合调整的最大活跃连接数,这个数字不宜设置过大,太多的并发连接对数据库的压力很大,甚至会导致雪崩,这是一定要注意的。但是如果设置过小,而应用的服务线程数有很高,可能会导致有的服务线程拿不到连接,所以服务的线程数和数据库连接数是需要经过配合调整的
    maxActive: 20
    #最大等待毫秒数, 单位为 ms, 超过时间会出错误信息最大等待毫秒数, 单位为 ms, 超过时间会出错误信息
    maxWait: 60000
    #每过多少秒运行一次空闲连接回收器,这里设置的是30秒
    timeBetweenEvictionRunsMillis: 30000
    #连接池中的连接空闲多少时间后被回收,这里设置的是30分钟   
    minEvictableIdleTimeMillis: 1800000
    # 验证使用的SQL语句
    validationQuery: SELECT 1 FROM DUAL
    #指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.  
    testWhileIdle: true
    # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
    testOnBorrow: false
    #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
    #testOnBorrow和testOnReturn在生产环境一般是不开启的,主要是性能考虑。失效连接主要通过testWhileIdle保证,如果获取到了不可用的数据库连接,一般由应用处理异常
    testOnReturn: false
    #是否缓存preparedStatement,即PSCache。PSCache对支持游标的数据库性能提升巨大
    poolPreparedStatements: true
    #最大启用PSCache的数量
     maxPoolPreparedStatementPerConnectionSize: 20 
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall,log4j
    # 合并多个DruidDataSource的监控数据
    useGlobalDataSourceStat: true
    #通过connectProperties属性来打开mergeSql功能;慢SQL记录
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
复制代码


接着新建一个Druid的配置类:


@Configuration
public class DruidConfig {
    @ConfigurationProperties(prefix = "spring.datasource")
    //将druid数据源注入ioc容器
    @Bean
    public DataSource druid(){
        return  new DruidDataSource();
    }
    //配置Druid的监控
    //1、配置管理后台的Servlet
    @Bean
    public ServletRegistrationBean DruidServlet(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        Map<String,String> initParams = new HashMap<>();
        //druid后台登录的用户名
        initParams.put("loginUsername","admin");
        //druid后台登录的密码
        initParams.put("loginPassword","111111");
        //默认就是允许所有访问
        initParams.put("allow","");
        bean.setInitParameters(initParams);
        return bean;
    }
    //2、配置监控的filter
    @Bean
    public FilterRegistrationBean druidStatFilter(){
        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;
    }
}
复制代码


@ConfigurationProperties注解获取yml配置文件的配置,prefix = "spring.datasource"表示前缀是spring.datasource的配置信息。 到了这一步就已经可以启动项目,看看效果了,启动项目后在浏览器的地址栏输入:


http://localhost:8080/druid/
复制代码


会跳转到Druid管理后台的登录页面,输入刚刚设置的用户名和密码登录管理后台,即可看到Druid监控的相关信息:


7bcd167e67e349a5a07ec6c2681a5c17~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


b2badd546a374ba09b4a18675d00aff7~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


5a560abc949c43868c4009e0a95c4c88~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


0d047c2a908b494795b26108547915fb~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


接着测试数据的增删改查,在数据库中新建一个表,并插入数据,如下所示。


微信截图_20220518084713.png


然后新建一个controller类,添加从数据库中查询数据的方法:


@Controller
public class HelloController {
    @Autowired
    JdbcTemplate jdbcTemplate;
    @ResponseBody
    @GetMapping("/select")
    public Map<String,Object> map(){
        List<Map<String, Object>> list = jdbcTemplate.queryForList("select * FROM demo");
        return list.get(0);
    }
}
复制代码


重新启动SpringBoot项目,并登录Druid后台,可以看到在sql监控下的信息是空的:


6cbcecc50bd2409ab1a09d498d44e2d9~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


然后新建一个标签页,输入请求:


http://localhost:8080/select
复制代码


9af0e1f4b9d44549bea248703349aa7f~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


在去监控后台的sql监控就可以发现已经监控到了刚刚请求中执行的sql语句:


d3b242fba705468b8c044eef69265e91~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


微信截图_20220518085211.png


结尾


以上就是如何通过SpringBoot整合Druid数据源以及配置数据源监控,当然Druid的使用不仅仅这些,还需要自己的不断的学习才能掌握更多的知识。

目录
打赏
0
0
0
0
8
分享
相关文章
|
4月前
|
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
141 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
197 0
|
2天前
|
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 &gt; Java系统属性 &gt; application.properties &gt; application.yml &gt; application.yaml。
25 0
Spring Boot 可视化监控
本文介绍了如何通过Spring Actuator、Micrometer、Prometheus和Grafana为Spring Boot应用程序添加监控功能。首先创建了一个Spring Boot应用,并配置了Spring Actuator以暴露健康状态和指标接口。接着,利用Micrometer收集应用性能数据,并通过Prometheus抓取这些数据进行存储。最后,使用Grafana将Prometheus中的数据可视化,展示在精美的仪表板上。整个过程简单易行,为Spring Boot应用提供了基本的监控能力,同时也为后续扩展更详细的监控指标奠定了基础。
161 2
Spring Boot与Druid升级解决方案
好的,我需要帮助用户解决他们遇到的数据库连接问题,并升级项目的依赖。首先,用户提供的错误信息是关于Spring Boot应用在初始化数据源时抛出的异常,具体是Druid连接池验证连接失败。同时,用户希望升级项目的依赖版本。
204 10
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
226 0
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——依赖导入和Thymeleaf相关配置
在Spring Boot中使用Thymeleaf模板,需引入依赖`spring-boot-starter-thymeleaf`,并在HTML页面标签中声明`xmlns:th=&quot;http://www.thymeleaf.org&quot;`。此外,Thymeleaf默认开启页面缓存,开发时建议关闭缓存以实时查看更新效果,配置方式为`spring.thymeleaf.cache: false`。这可避免因缓存导致页面未及时刷新的问题。
104 0
SpringBoot自定义配置注入的方式:自定义配置文件注入,从mysql读取配置进行注入
SpringBoot自定义配置注入的方式:自定义配置文件注入,从mysql读取配置进行注入
436 0
SpringBoot【付诸实践 01】SpringBoot自定义starter保姆级教程(说明+源码+配置+测试)
SpringBoot【付诸实践 01】SpringBoot自定义starter保姆级教程(说明+源码+配置+测试)
109 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问