29.1.2. 连接生产环境数据库

生产环境的数据库连接可以通过池化的DataSource进行自动配置。Spring Boot使用如下的算法,选取特定实现:

  1. 出于HikariCP的优秀性能和并发,如果可用总会优先使用它。

  2. 如果tomcat数据源连接池可用,我们将使用它。

  3. 如果HikariCP和tomcat数据源连接池都不能用。如果Commons DBCP2可用,我们将使用它。

如果使用spring-boot-starter-jdbcspring-boot-starter-data-jpa“starters”,你会自动添加HikariCP依赖。

通过指定spring.datasource.type属性,你可以完全抛弃该算法,然后指定数据库连接池。如果你在tomcat容器中运行应用,由于默认提供tomcat-jdbc,这就很重要了。

其他的连接池可以手动配置,如果你定义自己的DataSource bean,自动配置是不会发生的。

DataSource配置被外部的spring.datasource.*属性控制,例如,你可能会在application.properties中声明以下片段:

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

你应该至少使用spring.datasource.url属性指定url,或Spring Boot尝试自动配置内嵌数据库。

你经常不需要指定driver-class-name,因为Spring boot可以从url推断大部分数据库。

对于将要创建的池化DataSource,我们需要验证是否有一个可用的Driver,所以在做其他事前会校验它。也就是说,如果你设置spring.datasource.driver-class-name=com.mysql.jdbc.Driver,然后该class加载出来,否则就会出错。

其他可选配置可以查看DataSourceProperties,有些标准配置是跟实现无关的,对于实现相关的配置可以通过相应前缀进行设置(spring.datasource.hikari.*spring.datasource.tomcat.*spring.datasource.dbcp2.*),具体参考你使用的连接池文档。

例如,如果正在使用Tomcat连接池,你可以自定义很多其他设置,如下所示:

# Number of ms to wait before throwing an exception if no connection is available.
spring.datasource.tomcat.max-wait=10000

# Maximum number of active connections that can be allocated from this pool at the same time.
spring.datasource.tomcat.max-active=50

# Validate the connection before borrowing it from the pool.
spring.datasource.tomcat.test-on-borrow=true

最后更新于