springboot整合druid
druid是什么:
- Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。
- Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。
druid参数
配置 | 缺省值 | 说明 |
---|---|---|
name | 配置这个属性的意义在于没如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是"DataSource-"+System.identityHashCode(this) | |
jdbcUrl | 连接数据库的url,不同数据库不一样 | |
username | 连接数据库的用户名 | |
password | 连接数据库的密码。如果你不希望密码直接写在配置文件中 | |
driverClassName | 这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName(建议配置下) | |
initialSize | 初始化时建立物理连接的个数,初始化发生在显示调用init方法,或者第一次getConnection时 | |
maxActive | 最大连接池数量 | |
maxIdle | 已经不再使用,配置了也没效果 | |
minIdle | 最小连接池数量 | |
maxWait | 获取连接时最大等待时间,单位毫秒,配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁 | |
poolPreparedStatements | 是否缓存preparedStatement,也就是PsCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭 | |
maxOpenPreparedStatements | 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置打一下,比如说100 | |
validationQuery | 用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn 、testWhileIdle都不会起作用 | |
testOnBorrow | 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 | |
testOnReturn | 归还连接时执行它validationQuery检测连接是否有效,做了这个配置会降低性能 | |
testWhileIdle | 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunMills,执行validationQuery检测连接是否有效 | |
timeBetweenEvictionRunMillis | 有两个含义:Destory线程会检测连接的间隔时间 testWhileIdle的判断依据,详细看testWhileIdele属性的说明 | |
numTestsPerEvictionRun | 不再使用,一个DruidDataSource只支持一个EvicationRun | |
minEvictableIdleTimeMillis | ||
connectionInitSqls | 物理连接初始化的时候执行sql | |
exceptionSorter | 当数据库抛出一些不可恢复的异常时,抛弃连接 | |
filters | 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat日志用的filter;log4j防御注入的filter:wall | |
proxyFilters | 类型是List<com.alibaba.druid,filter.Filter>,如果同时配置filter和proxyFilters,是组合关系,并非 |
使用:
//表示该类为配置类
@Configuration
public class DruidConfig {
//创建datasource并将其作为一个组件装配到spring中
@Bean
//因为我们使用的是自定义的数据源,在对数据源进行配置时,需要.yaml文件里的全局属性
@ConfigurationProperties(prefix = "spring.datasource")
public DruidDataSource getDruidDataSource(){
return new DruidDataSource();
}
//这个方法主要是注册servlet,因为在springboot中没有xml文件,所有的servlet请求均被dispatchservlet接管。
@Bean
public ServletRegistrationBean servletRegistrationBean(){
//这里自定义一个注册servlet的组件
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");
HashMap<String, String> initParams = new HashMap<>();
//键名是经过规定的,不可自定义
initParams.put("loginUsername","admin");
initParams.put("loginPassword","123456");
initParams.put("allow","");
bean.setInitParameters(initParams);
return bean;
}
}
- ServletRegistrationBean:servlet注册组件
- StatViewServlet:
本笔记来源于对b站up狂神说Docker的记录,仅用个人学习使用