马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

SpringBoot整合Druid

[复制链接]
查看2256 | 回复1 | 2019-10-17 09:48:05 | 显示全部楼层 |阅读模式

迩来不停在折腾springboot,也根据需要整合了一些好用的库,mybatis作为连续层数据操作,也想用一下大名鼎鼎的Druid来做毗连池和数据库监控服务。于是探索了一下战书,整理出这篇小文,盼望能帮助到同道,也给本身做个记载反思。

  • 1.关于Druid

Druid是阿里团队开源的高性能数据库毗连池,国内利用广泛,特别是在监控sql和数据库性能方面非常强大。

毗连池能有效节流数据库毗连消耗,且对高写入、实时性要求高的业务非常符合。

  • 2.引入依赖到pom.xml中。
  1. <code><dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>druid-spring-boot-starter</artifactId>
  4. <version>1.1.10</version>
  5. </dependency>
  6. </code>
复制代码
  • 3.然后在application.yml中设置相干设置
  1. <code>spring:
  2. datasource:
  3. url: jdbc:mysql://127.0.0.1:3306/test_go?characterEncoding=UTF-8&useSSL=false
  4. username: xxx
  5. password: xxxxxx
  6. driver-class-name: com.mysql.jdbc.Driver
  7. type: com.alibaba.druid.pool.DruidDataSource
  8. druid:
  9. initial-size: 5
  10. min-idle: 5
  11. max-active: 20
  12. test-while-idle: true
  13. test-on-borrow: false
  14. test-on-return: false
  15. pool-prepared-statements: true
  16. max-pool-prepared-statement-per-connection-size: 20
  17. max-wait: 60000
  18. time-between-eviction-runs-millis: 60000
  19. min-evictable-idle-time-millis: 30000
  20. filters: stat
  21. async-init: true</code>
复制代码

此中最重要的是

type: com.alibaba.druid.pool.DruidDataSource

如许就不会利用Springboot默认的毗连池Hikari。

由于SpringBoot没法见效写在yml文件中的设置,需要单独编写Bean文件来加载。

  • 4.定义Druid设置类。
  1. <code>package com.tony.testspringboot.config;
  2. import com.alibaba.druid.pool.DruidDataSource;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.context.annotation.Primary;
  9. import javax.sql.DataSource;
  10. import java.sql.SQLException;
  11. @Configuration
  12. public class DruidConfig {
  13. private Logger logger = LoggerFactory.getLogger(DruidConfig.class);
  14. @Value("${spring.datasource.url}")
  15. private String dbUrl;
  16. @Value("${spring.datasource.username}")
  17. private String username;
  18. @Value("${spring.datasource.password}")
  19. private String password;
  20. @Value("${spring.datasource.test-druid.driver-class-name}")
  21. private String driverClassName;
  22. @Value("${spring.datasource.druid.initial-size}")
  23. private int initialSize;
  24. @Value("${spring.datasource.druid.min-idle}")
  25. private int minIdle;
  26. @Value("${spring.datasource.druid.max-active}")
  27. private int maxActive;
  28. @Value("${spring.datasource.druid.max-wait}")
  29. private int maxWait;
  30. @Value("${spring.datasource.druid.time-between-eviction-runs-millis}")
  31. private int timeBetweenEvictionRunsMillis;
  32. @Value("${spring.datasource.druid.min-evictable-idle-time-millis}")
  33. private int minEvictableIdleTimeMillis;
  34. @Value("${spring.datasource.druid.test-while-idle}")
  35. private boolean testWhileIdle;
  36. @Value("${spring.datasource.druid.test-on-borrow}")
  37. private boolean testOnBorrow;
  38. @Value("${spring.datasource.druid.test-on-return}")
  39. private boolean testOnReturn;
  40. @Value("${spring.datasource.druid.pool-prepared-statements}")
  41. private boolean poolPreparedStatements;
  42. @Value("${spring.datasource.druid.max-pool-prepared-statement-per-connection-size}")
  43. private int maxPoolPreparedStatementPerConnectionSize;
  44. @Value("${spring.datasource.druid.filters}")
  45. private String filters;
  46. @Bean
  47. @Primary
  48. public DataSource dataSource() {
  49. DruidDataSource datasource = new DruidDataSource();
  50. datasource.setUrl(this.dbUrl);
  51. datasource.setUsername(this.username);
  52. datasource.setPassword(this.password);
  53. datasource.setDriverClassName(this.driverClassName);
  54. // configuration
  55. datasource.setInitialSize(this.initialSize);
  56. datasource.setMinIdle(this.minIdle);
  57. datasource.setMaxActive(this.maxActive);
  58. datasource.setMaxWait(this.maxWait);
  59. datasource.setTimeBetweenEvictionRunsMillis(this.timeBetweenEvictionRunsMillis);
  60. datasource.setMinEvictableIdleTimeMillis(this.minEvictableIdleTimeMillis);
  61. datasource.setTestWhileIdle(this.testWhileIdle);
  62. datasource.setTestOnBorrow(this.testOnBorrow);
  63. datasource.setTestOnReturn(this.testOnReturn);
  64. datasource.setPoolPreparedStatements(this.poolPreparedStatements);
  65. datasource.setMaxPoolPreparedStatementPerConnectionSize(this.maxPoolPreparedStatementPerConnectionSize);
  66. try {
  67. datasource.setFilters(this.filters);
  68. } catch (SQLException e) {
  69. logger.error("druid configuration init fail!");
  70. }
  71. return datasource;
  72. }
  73. }
  74. </code>
复制代码

云云即可让设置的参数见效并作为首选的DataSource进利用用。

5.在Controller中测试。

可以利用JdbcTemplate来进行查询。
测试代码如下所示:

  1. <code>@RequestMapping(value = "/hey", method = RequestMethod.GET)
  2. public ResultResponse testDruid() {
  3. String sql = "SELECT mobile FROM user WHERE id = ?";
  4. String mobile = jdbcTemplate.queryForObject(sql, new Object[]{1}, String.class);
  5. return new ResultResponse(201, "hey" + mobile);
  6. }
  7. </code>
复制代码

PS: ResultResponse是我项目中封装的通用response对象。

关于多数据源参数的设置。

只需要在yml(application.yml)中设置即可,格式如下:

  1. <code>datasource:
  2. one-source:
  3. url: jdbc:mysql://127.0.0.1:3306/test_go?characterEncoding=UTF-8&useSSL=false
  4. username: xxxx1
  5. password: xxxx
  6. driver-class-name: com.mysql.jdbc.Driver
  7. type: com.alibaba.druid.pool.DruidDataSource
  8. two-source:
  9. url: jdbc:mysql://127.0.0.1:3306/demo2?characterEncoding=UTF-8&useSSL=false
  10. username: xxxx
  11. password: 1xxxxxx
  12. driver-class-name: com.mysql.jdbc.Driver
  13. type: com.alibaba.druid.pool.DruidDataSource
  14. ...</code>
复制代码

利用的时候也遵照这个结构,如要获取第一个数据源的url设置则在DruidConfig.java文件中的相应项的@Value中如许写:

  1. <code>@Value("${spring.datasource.one-source.url}")
  2. private String dbUrl;</code>
复制代码
  • 6.设置数据库监控。

a) 先在application.yml中增加如下设置:

  1. <code>druid:
  2. .....
  3. # 通过connectProperties属性来打开mergeSql功能;慢SQL记载
  4. connection-properties: druid.stat.mergeSql=true;druid.stat.SlowSqlMills=5000
  5. # 监控后台的设置,如登录账号和暗码等
  6. monitor:
  7. allow: 127.0.0.1
  8. loginUsername: admin
  9. loginPassword: admin</code>
复制代码

b)单独编写DruidMonitorConfiguration类。

  1. <code>public class DruidMonitorConfiguration {
  2. @Value("${spring.datasource.druid.monitor.allow}")
  3. private String allow;
  4. // @Value("${spring.datasource.druid.monitor.deny}")
  5. // private String deny;
  6. @Value("${spring.datasource.druid.monitor.loginUsername}")
  7. private String loginUsername;
  8. @Value("${spring.datasource.druid.monitor.loginPassword}")
  9. private String loginPassword;
  10. @Value("${spring.datasource.druid.monitor.resetEnable")
  11. private String resetEnable;
  12. @Bean
  13. public ServletRegistrationBean druidStatViewServlet() {
  14. ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
  15. servletRegistrationBean.addInitParameter("allow", this.allow);
  16. // servletRegistrationBean.addInitParameter("deny", this.deny);
  17. servletRegistrationBean.addInitParameter("loginUsername", this.loginUsername);
  18. servletRegistrationBean.addInitParameter("loginPassword", this.loginPassword);
  19. servletRegistrationBean.addInitParameter("resetEnable", this.resetEnable);
  20. return servletRegistrationBean;
  21. }
  22. @Bean
  23. public FilterRegistrationBean druidStatFilter() {
  24. FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
  25. filterRegistrationBean.addUrlPatterns("/*");
  26. filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
  27. return filterRegistrationBean;
  28. }
  29. }
  30. </code>
复制代码

访问方法就是:http://project-name.com/druid/login.html

验证登录即可。整个监控功能非常强大,有sql监控、URI监控、Session监控,Web应用等等。







来源:https://www.cnblogs.com/freephp/p/11688387.html
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则