阿里druid-spring-boot-starter 配置,个人整理以及遇到的问题(防止之后找 ...

打印 上一主题 下一主题

主题 895|帖子 895|积分 2685


简介,什么是Druid
Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求,比如向密钥服务请求凭证、统计SQL信息、SQL性能收集、SQL注入检查、SQL翻译等,程序员可以通过定制来实现自己需要的功能。
1、Druid官方github地址(这个可以多看看)

https://github.com/alibaba/druid
2、需要导入一些依赖

Druid数据池依赖
  1.         <dependency>
  2.             <groupId>org.springframework.boot</groupId>
  3.             <artifactId>spring-boot-starter-jdbc</artifactId>
  4.         </dependency>
  5.         <dependency>
  6.             <groupId>mysql</groupId>
  7.             <artifactId>mysql-connector-java</artifactId>
  8.         </dependency>
  9.         
  10.         <dependency>
  11.             <groupId>com.alibaba</groupId>
  12.             <artifactId>druid-spring-boot-starter</artifactId>
  13.             <version>1.2.11</version>
  14.         </dependency>
  15.         <dependency>
  16.             <groupId>com.alibaba</groupId>
  17.             <artifactId>druid</artifactId>
  18.             <version>1.2.11</version>
  19.         </dependency>
  20.         <dependency>
  21.             <groupId>log4j</groupId>
  22.             <artifactId>log4j</artifactId>
  23.             <version>1.2.17</version>
  24.         </dependency>
  25.         
  26.         <dependency>
  27.             <groupId>org.springframework.boot</groupId>
  28.             <artifactId>spring-boot-starter-aop</artifactId>
  29.         </dependency>
复制代码
3、Druid配置信息

现版本其实有大量的默认值都已经配置好了,可以自己去看看源码
(配置信息多,用yaml)
(对于Druid配置,只需要选用自己需要的就行了,我这里是写的一个总结,后面自己有需要其他还会加)
  1. spring:
  2. #数据库配置项
  3. # JDBC 配置(驱动类自动从url的mysql识别,数据源类型自动识别)(yaml相对来说配置信息更加好观看)
  4.   datasource:
  5.     druid:
  6.       type: com.alibaba.druid.pool.DruidDataSource
  7.       url: jdbc:mysql://localhost:3306/crm
  8.       driver-class-name: com.mysql.cj.jdbc.Driver
  9.       username: root
  10.       password: 2003
  11. #    连接池配置信息(通常来说,只需要修改initialSize、minIdle、maxActive
  12. #     如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。removeabandoned不建议在生产环境中打开如果用SQL Server,建议追加配置)
  13.   #     初始化大小
  14.       initial-size: 5
  15.       min-idle: 5
  16.       max-active: 20
  17.   #     配置获取连接等待超时的时间
  18.       max-wait: 60000
  19.   #     配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
  20.       time-between-eviction-runs-millis: 60000
  21.   #     配置一个连接在池中最小生存的时间,单位是毫秒
  22.       min-evictable-idle-time-millis: 300000
  23.   #     申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
  24.       test-while-idle: true
  25.   #     获取连接时执行检测,建议关闭,影响性能
  26.       test-on-borrow: false
  27.   #     是否开启PSCache,PSCahce对支持游标的数据库性能提示巨大,oracle建议开启,mysql下建议关闭
  28.       pool-prepared-statements: false
  29.   #     开启poolPreparedStatments后生效
  30.       max-pool-prepared-statement-per-connection-size: 20
  31.       #     配置监控统计拦截的filters,去掉后监控界面sql无法统计,‘wall’用于防火墙·,log4j2:日志
  32.       filters: stat,wall,log4j2
  33.       # Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
  34.       # Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
  35.       aop-patterns: 'com.haoyang.webadmin.*'
  36.         #     配置监控属性: 在druid-starter的: com.alibaba.druid.spring.boot.autoconfigure.stat包下进行的逻辑配置
  37.       web-stat-filter: # WebStatFilter配置,
  38.         enabled: true #默认为false,表示不使用WebStatFilter配置,就是属性名去短线
  39.         url-pattern: /* #拦截该项目下的一切请求
  40.         exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' #对这些请求放行
  41.         session-stat-enable: true
  42.         principal-session-name: session_name
  43.         principal-cookie-name: cookie_name
  44.   #        profile-enable:
  45.         #        session-stat-max-count:
  46.       stat-view-servlet: # StatViewServlet配置
  47.         enabled: true  #默认为false,表示不使用StatViewServlet配置,就是属性名去短线
  48.         url-pattern: /druid/*  #配置DruidStatViewServlet的访问地址。后台监控页面的访问地址
  49.         reset-enable: false #禁用HTML页面上的“重置”功能,会把所有监控的数据全部清空,一般不使用
  50.         login-username: admin #监控页面登录的用户名
  51.         login-password: 2003 #监控页面登录的密码
  52. #       StatViewSerlvet展示出来的监控信息比较敏感,是系统运行的内部情况,如果你需要做访问控制,可以配置allow和deny这两个参数
  53. #       deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝。如果allow没有配置或者为空,则允许所有访问
  54. #       配置的格式
  55. #        <IP>
  56. #        或者<IP>/<SUB_NET_MASK_size>其中128.242.127.1/24
  57. #        24表示,前面24位是子网掩码,比对的时候,前面24位相同就匹配,不支持IPV6。
  58.         allow: 127.0.0.1,192.168.2.111  #IP白名单(没有配置或者为空,则允许所有访问)。允许谁访问druid后台,默认允许全部用户访问。
  59.         deny:  #IP黑名单 (存在共同时,deny优先于allow)。不允许谁访问druid后台
  60.       filter:
  61.         stat:
  62.           enabled: true         # 开启DruidDataSource状态监控
  63.           db-type: mysql        # 数据库的类型
  64.           log-slow-sql: true    # 开启慢SQL记录功能
  65.           slow-sql-millis: 2000 # 默认3000毫秒,这里超过2s,就是慢,记录到日志
  66.         wall:
  67.           enabled: true
  68.           config:
  69.             drop-table-allow: false
复制代码
4、问题

以前学习并没有仔细观看,现在回来看一遍发现了一些问题(后续继续添加,目前学的不深)
1、配置问题

一开始把所有的数据库连接池配置信息全部写进spring.datasource.druid下,这样子
  1. spring:
  2.   datasource:
  3.     druid:
  4.       filters: stat,wall,log4j2
  5.         #     初始化大小
  6.       initial-szie: 5
  7.       min-idle: 5
  8.       max-active: 20
复制代码
然后写了一个测试类
测试类
  1. @SpringBootTest
  2. class ApplicationTests {
  3.     @Autowired
  4.     DataSource dataSource;
  5.     @Test
  6.     void contextLoads() throws SQLException {
  7.         System.out.println(dataSource.getClass());
  8.         //获得连接
  9.         Connection connection = dataSource.getConnection();
  10.         System.out.println(connection);
  11.         DruidDataSource druidDataSource = (DruidDataSource) dataSource;
  12.         System.out.println(druidDataSource.getMaxActive());
  13.         System.out.println(druidDataSource.getInitialSize());
  14.         System.out.println(druidDataSource.getMinIdle());
  15.         //关闭连接
  16.         connection.close();
  17.     }
  18. }
复制代码
​然后经过了一些列断点,源码查看之后,发现spring.datasource.druid配置并没有生效,发现是支持监控配置,但连接池配置并没有写进去这里看了一下官方的SpringBoot配置示例:
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
最后发现我自己写了一个自定义注入类,然后注入的并不是spring.datasource.druid下的,而是spring.datasource下的,所以会报错,如果并没有写这个类也没事,SpringBoot会自动注入
  1. ​/**
  2. *       将自定义的Druid数据源添加到容器中,不再让Spring Boot 自动创建
  3. *       这样做的目的是: 绑定全局配置文件中的druid 数据源属性注入到 com.alibaba.druid.pool.DruidDataSource
  4. *       从而让它们生效
  5. *
  6. *       @ConfigurationProperties(prefix = "spring.datasource"):
  7. *         作用就是将 全局配置文件中前缀为Spring.dataSource的属性值注入到com.alibaba.druid.pool.DruidDataSource的同名参数中
  8. */
  9. @Configuration
  10. public class DruidConfig {
  11.     /**
  12.      *     将所有前缀为spring.datasource下的配置项都加载DataSource中
  13.      */
  14. //@ConfigurationProperties("spring.datasource"),这样注入,无法将druid配置文件下的连接池配置自动注入,所以我加一个.druid,这样就是将spring.datasource.druid的属性值注入到com.alibaba.druid.pool.DruidDataSource的同名参数中,而不是spring.datasource
  15.     @ConfigurationProperties("spring.datasource.druid")
  16.     @Bean
  17.     public DataSource druidDataSource() {
  18.         return new DruidDataSource();
  19.     }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表