可以看到,在java.sql
中并没有数据源(Data Source)的概念。这是由于在java.sql
中包含的是JDBC内核API,另外还有个javax.sql
包,其中包含了JDBC标准的扩展API。而关于数据源(Data Source)的定义,就在javax.sql
这个扩展包中。
实际上,在JDBC内核API的实现下,就已经可以实现对数据库的访问了,那么我们为什么还需要数据源呢?主要出于以下几个目的:
-
封装关于数据库访问的各种参数,实现统一管理
-
通过对数据库的连接池管理,节省开销并提高效率
在Java这个自由开放的生态中,已经有非常多优秀的开源数据源可以供大家选择,比如:DBCP、C3P0、Druid、HikariCP等。
而在Spring Boot 2.x中,对数据源的选择也紧跟潮流,采用了目前性能最佳的HikariCP。接下来,我们就来具体说说,这个Spring Boot中的默认数据源配置。
默认数据源:HikariCP
由于Spring Boot的自动化配置机制,大部分对于数据源的配置都可以通过配置参数的方式去改变。只有一些特殊情况,比如:更换默认数据源,多数据源共存等情况才需要去修改覆盖初始化的Bean内容。本节我们主要讲Hikari的配置,所以对于使用其他数据源或者多数据源的情况,在之后的教程中学习。
在Spring Boot自动化配置中,对于数据源的配置可以分为两类:
- 通用配置:以
spring.datasource.*
的形式存在,主要是对一些即使使用不同数据源也都需要配置的一些常规内容。比如:数据库链接地址、用户名、密码等。这里就不做过多说明了,通常就这些配置:
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- 数据源连接池配置:以
spring.datasource. <数据源名称> .*
的形式存在,比如:Hikari的配置参数就是spring.datasource.hikari.*
形式。下面这个是我们最常用的几个配置项及对应说明:
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.idle-timeout=500000
spring.datasource.hikari.max-lifetime=540000
spring.datasource.hikari.connection-timeout=60000
spring.datasource.hikari.connection-test-query=SELECT 1
这些配置的含义:
-
spring.datasource.hikari.minimum-idle
: 最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size -
spring.datasource.hikari.maximum-pool-size
: 最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值 -
spring.datasource.hikari.idle-timeout
: 空闲连接超时时间,默认值600000(10分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。 -
spring.datasource.hikari.max-lifetime
: 连接最大存活时间,不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短 -
spring.datasource.hikari.connection-timeout
: 连接超时时间:毫秒,小于250毫秒,否则被重置为默认值30秒 -
spring.datasource.hikari.connection-test-query
: 用于测试连接是否可用的查询语句
更多完整配置项可查看下表:
| name
| 描述
| 构造器默认值
| 默认配置validate之后的值 | validate重置
|
| — | — | — | — | — |
| autoCommit
| 自动提交从池中返回的连接
| TRUE | TRUE | – |
| connectionTimeout
| 等待来自池的连接的最大毫秒数
| SECONDS.toMillis(30) = 30000
| 30000 | 如果小于250毫秒,则被重置回30秒 |
| idleTimeout
| 连接允许在池中闲置的最长时间
| MINUTES.toMillis(10) = 600000
| 600000 | 如果idleTimeout 1秒>maxLifetime 且 maxLifetime>0,则会被重置为0(代表永远不会退出);如果idleTimeout!=0且小于10秒,则会被重置为10秒 |
| maxLifetime
| 池中连接最长生命周期
| MINUTES.toMillis(30) = 1800000 | 1800000 | 如果不等于0且小于30秒则会被重置回30分钟
|
| connectionTestQuery
| 如果您的驱动程序支持JDBC4,我们强烈建议您不要设置此属性
| null | null | – |
| minimumIdle
| 池中维护的最小空闲连接数
| -1 | 10 | minIdle<0或者minIdle>maxPoolSize,则被重置为maxPoolSize
|
| maximumPoolSize
| 池中最大连接数,包括闲置和使用中的连接
| -1 | 10 | 如果maxPoolSize小于1,则会被重置。当minIdle<=0被重置为DEFAULT_POOL_SIZE则为10;如果minIdle>0则重置为minIdle的值 |
| metricRegistry
| 该属性允许您指定一个 Codahale / Dropwizard MetricRegistry 的实例,供池使用以记录各种指标 | null | null | – |
| healthCheckRegistry
| 该属性允许您指定池使用的Codahale / Dropwizard HealthCheckRegistry的实例来报告当前健康信息 | null | null | – |
| poolName
| 连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置 | null | HikariPool-1 | – |
| initializationFailTimeout | 如果池无法成功初始化连接,则此属性控制池是否将 fail fast
| 1 | 1 | – |
| isolateInternalQueries
| 是否在其自己的事务中隔离内部池查询,例如连接活动测试
| FALSE | FALSE | – |
| allowPoolSuspension
| 控制池是否可以通过JMX暂停和恢复
| FALSE | FALSE | – |
| readOnly
| 从池中获取的连接是否默认处于只读模式
| FALSE | FALSE | – |
| registerMbeans
| 是否注册JMX管理Bean(MBeans)
| FALSE | FALSE | – |
| catalog
| 为支持 catalog 概念的数据库设置默认 catalog
| driver default | null | – |
| connectionInitSql
| 该属性设置一个SQL语句,在将每个新连接创建后,将其添加到池中之前执行该语句。 | null | null | – |
| driverClassName
| HikariCP将尝试通过仅基于jdbcUrl的DriverManager解析驱动程序,但对于一些较旧的驱动程序,还必须指定driverClassName | null | null | – |
| transactionIsolation
| 控制从池返回的连接的默认事务隔离级别
| null | null | – |
| validationTimeout
| 连接将被测试活动的最大时间量
| SECONDS.toMillis(5) = 5000
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
写在最后
还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
andra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存**,Hadoop,Spark,Storm,YARN,机器学习,云计算…
[外链图片转存中…(img-0jjdaglW-1713497323421)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!