简介,什么是Druid

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

1、Druid官方github地址(这个可以多看看)

https://github.com/alibaba/druid

2、需要导入一些依赖

Druid数据池依赖
<!--        数据库-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.11</version>
</dependency>
<!-- 数据库日志实现-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--SpringBoot 的aop 模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

3、Druid配置信息

现版本其实有大量的默认值都已经配置好了,可以自己去看看源码

(配置信息多,用yaml)

(对于Druid配置,只需要选用自己需要的就行了,我这里是写的一个总结,后面自己有需要其他还会加)

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

4、问题

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

1、配置问题

一开始把所有的数据库连接池配置信息全部写进spring.datasource.druid下,这样子

spring:
datasource:
druid:
filters: stat,wall,log4j2
# 初始化大小
initial-szie: 5
min-idle: 5
max-active: 20

然后写了一个测试类

测试类
@SpringBootTest
class ApplicationTests {
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
System.out.println(dataSource.getClass());
//获得连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
DruidDataSource druidDataSource = (DruidDataSource) dataSource;
System.out.println(druidDataSource.getMaxActive());
System.out.println(druidDataSource.getInitialSize());
System.out.println(druidDataSource.getMinIdle());
//关闭连接
connection.close();
}
}


然后经过了一些列断点,源码查看之后,发现spring.datasource.druid配置并没有生效,发现是支持监控配置,但连接池配置并没有写进去

这里看了一下官方的SpringBoot配置示例:

https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

最后发现我自己写了一个自定义注入类,然后注入的并不是spring.datasource.druid下的,而是spring.datasource下的,所以会报错,如果并没有写这个类也没事,SpringBoot会自动注入

​/**
* 将自定义的Druid数据源添加到容器中,不再让Spring Boot 自动创建
* 这样做的目的是: 绑定全局配置文件中的druid 数据源属性注入到 com.alibaba.druid.pool.DruidDataSource
* 从而让它们生效
*
* @ConfigurationProperties(prefix = "spring.datasource"):
* 作用就是将 全局配置文件中前缀为Spring.dataSource的属性值注入到com.alibaba.druid.pool.DruidDataSource的同名参数中
*/ @Configuration
public class DruidConfig {
/**
* 将所有前缀为spring.datasource下的配置项都加载DataSource中
*/ //@ConfigurationProperties("spring.datasource"),这样注入,无法将druid配置文件下的连接池配置自动注入,所以我加一个.druid,这样就是将spring.datasource.druid的属性值注入到com.alibaba.druid.pool.DruidDataSource的同名参数中,而不是spring.datasource @ConfigurationProperties("spring.datasource.druid")
@Bean
public DataSource druidDataSource() {
return new DruidDataSource();
}

阿里druid-spring-boot-starter 配置,个人整理以及遇到的问题(防止之后找不到)的更多相关文章

  1. Druid Spring Boot Starter 从配置到简单运行 -解决zone不匹配 -解决dataSource加载失败

    Druid Spring Boot Starter 中文 | English Druid Spring Boot Starter 用于帮助你在Spring Boot项目中轻松集成Druid数据库连接池 ...

  2. Sping Boot入门到实战之实战篇(一):实现自定义Spring Boot Starter——阿里云消息队列服务Starter

    在 Sping Boot入门到实战之入门篇(四):Spring Boot自动化配置 这篇中,我们知道Spring Boot自动化配置的实现,主要由如下几部分完成: @EnableAutoConfigu ...

  3. 自定义的Spring Boot starter如何设置自动配置注解

    本文首发于个人网站: 在Spring Boot实战之定制自己的starter一文最后提到,触发Spring Boot的配置过程有两种方法: spring.factories:由Spring Boot触 ...

  4. Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件

    本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 图 2 第二章目录结构图 第 2 章 Spr ...

  5. Spring Boot 属性配置&自定义属性配置

    在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring boot中的模块化配置,在pom.xml中依赖的每个Starter都有默认配置,而这些默认配 ...

  6. Spring Boot自定义配置实现IDE自动提示

    一.背景 官方提供的spring boot starter的配置项,我们用IDE配置的时候一般都有自动提示的,如下图所示 而我们自己自定义的配置却没有,对开发非常不友好容易打错配置,那这个是怎样实现的 ...

  7. Spring Boot属性配置&自定义属性配置

    一.修改默认配置 例1.spring boot 开发web应用的时候,默认tomcat的启动端口为8080,如果需要修改默认的端口,则需要在application.properties 添加以下记录: ...

  8. 一个简单易上手的短信服务Spring Boot Starter

    前言 短信服务在用户注册.登录.找回密码等相关操作中,可以让用户使用更加便捷,越来越多的公司都采用短信验证的方式让用户进行操作,从而提高用户的实用性. Spring Boot Starter 由于 S ...

  9. 最详细的自定义Spring Boot Starter开发教程

    1. 前言 随着Spring的日渐臃肿,为了简化配置.开箱即用.快速集成,Spring Boot 横空出世. 目前已经成为 Java 目前最火热的框架了.平常我们用Spring Boot开发web应用 ...

  10. spring boot 环境配置(profile)切换

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

随机推荐

  1. Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程

    上文,我们看了IOC设计要点和设计结构:紧接着这篇,我们可以看下源码的实现了:Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的. ...

  2. 加班?不存在的啦~Python处理Excel,学会这十四个方法,工作量减少大半

    现在Python横行的年代,财务.人事.行政等等岗位多少得学点Python,省事又不费脑!所有操作都用Python自动实现, 加班?不存在的! excel和python其实都是工具,不要也不用拿去做对 ...

  3. Python程序入口 __name__ == ‘__main__‘ 有重要功能(多线程)而非编程习惯

    文章来源于互联网(https://jq.qq.com/?_wv=1027&k=rX9CWKg4) 在Python中,被称为「程序的入口」的 if name =='main': 总是出现在各种示 ...

  4. Tomcat深入浅出——Servlet(三)

    零.HttpServletRequest 上一篇已经介绍了这个接口,现在补充些内容 首先介绍一下作用域: jakarta.servlet.jsp.PageContext pageContext 页面作 ...

  5. Tapdata x 轻流,为用户打造实时接入轻流的数据高速通道

      在全行业加速布局数字化的当口,如何善用工具,也是为转型升级添薪助力的关键一步.   那么当轻量的异构数据实时同步工具,遇上轻量的数字化管理工具,将会收获什么样的新体验?此番 Tapdata 与轻流 ...

  6. Python中print()函数的用法详情

    描述 print() 方法用于打印输出,最python中常见的一个函数. 在交互环境中输入help(print)指令,可以显示print()函数的使用方法. >>> help(pri ...

  7. Gorgerous -「歌词」留言板

    歌者,献祭「心声」,以沐浴「新生」. Oh love. How I miss you every single days when I see you on those streets. Oh lov ...

  8. Solution -「简单 DP」zxy 讲课记实

    魔法题位面级乱杀. 「JOISC 2020 Day4」治疗计划 因为是不太聪明的 Joker,我就从头开始理思路了.中途也会说一些和 DP 算法本身有关的杂谈,给自己的冗长题解找借口. 首先,治疗方案 ...

  9. Template -「整体二分」

    写的简单.主要是留给自己做复习资料. 「BZOJ1901」Dynamic Rankings. 给定一个含有 \(n\) 个数的序列 \(a_1,a_2 \dots a_n\),需要支持两种操作: Q ...

  10. 树莓派Raspiberry 编译Linux实时内核PREEMPT-RT 实战

    树莓派4B 实时内核(Preempt_RT)的配置和编译https://blog.csdn.net/zlp_zky/article/details/114994444 基本按照这个blog来操作. 几 ...