Spring-Boot 支持 HikariCP(默认)、tomcat-jdbc 和 Commons DBCP 作为数据库的连接池。但是,每个池都使用一组不同的属性。在本教程中,我们将学习如何配置 Tomcat 连接池。
配置 Tomcat JDBC 连接池
首先,要配置 Tomcat 连接池,您需要在application.properties文件的“ spring.datasource.tomcat ”命名空间中添加属性。这是一个例子:
spring.datasource.tomcat.initial-size=15
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=15
spring.datasource.tomcat.min-idle=8
spring.datasource.tomcat.default-auto-commit=true
接下来,在您的 pom.xml 中,您需要禁用默认连接池 ( HikariCP ) 并引入tomcat-jdbc依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>10.0.16</version>
</dependency>
最后,根据您的数据库,添加连接到数据库的驱动程序。如果您要使用 H2 数据库:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.210</version>
<scope>runtime</scope>
</dependency>
Tomcat 池属性
如果要查看可通过反射调用的可用属性列表,请查看下表:
spring.datasource.tomcat.default-autoCommit | (布尔值)此池创建的连接的默认自动提交状态。如果未设置,则默认为 JDBC 驱动程序默认值(如果未设置,则setAutoCommit 不会调用该方法。) |
spring.datasource.tomcat.default-readOnly | (布尔值)此池创建的连接的默认只读状态。如果未设置,则不会调用该setReadOnly 方法。(某些驱动程序不支持只读模式,例如:Informix) |
spring.datasource.tomcat.default-transaction-isolation | (字符串)此池创建的连接的默认 TransactionIsolation 状态。以下之一:(请参阅javadoc )
如果未设置,则不会调用该方法,默认为 JDBC 驱动程序。 |
spring.datasource.tomcat.default-catalog | (字符串)此池创建的连接的默认目录。 |
spring.datasource.tomcat.driver-class-name | (字符串)要使用的 JDBC 驱动程序的完全限定 Java 类名。驱动程序必须可以从与 tomcat-jdbc.jar 相同的类加载器访问 |
spring.datasource.tomcat.username | (字符串)要传递给我们的 JDBC 驱动程序以建立连接的连接用户名。请注意,DataSource.getConnection(username,password) 默认情况下,方法不会使用传递给方法的凭据,但会使用此处配置的凭据。更多详情请见alternateUsernameAllowed 物业。 |
spring.datasource.tomcat.password | (字符串)要传递给我们的 JDBC 驱动程序以建立连接的连接密码。请注意,DataSource.getConnection(username,password) 默认情况下,方法不会使用传递给方法的凭据,但会使用此处配置的凭据。更多详情请见alternateUsernameAllowed 物业。 |
spring.datasource.tomcat.max-active | (int) 可以同时从此池中分配的最大活动连接数。默认值为100 |
spring.datasource.tomcat.max-idle | (int) 应始终保留在池中的最大连接数。默认值是maxActive :100 定期检查空闲连接(如果启用),空闲时间超过minEvictableIdleTimeMillis 将被释放的连接。(另见testWhileIdle ) |
spring.datasource.tomcat.min-idle | (int) 应始终保留在池中的最小已建立连接数。如果验证查询失败,连接池可能会缩小到此数字以下。默认值来自initialSize :(10 另见testWhileIdle ) |
spring.datasource.tomcat.initial-size | (int) 池启动时创建的初始连接数。默认值为10 |
spring.datasource.tomcat.max-wait | (int) 池将等待(当没有可用连接时)在抛出异常之前返回连接的最大毫秒数。默认值为30000 (30 秒) |
spring.datasource.tomcat.test-on-borrow | (布尔值)指示对象在从池中借用之前是否经过验证。如果对象验证失败,它将从池中删除,我们将尝试借用另一个。为了进行更有效的验证,请参阅validationInterval 。默认值为false |
spring.datasource.tomcat.test-on-connect | (布尔值)第一次创建连接时是否验证对象的指示。如果一个对象验证失败,它将被抛出SQLException 。默认值为false |
spring.datasource.tomcat.test-on-return | (布尔值)指示对象在返回池之前是否经过验证。默认值为false 。 |
spring.datasource.tomcat.test-while-idle | (布尔值)指示对象是否将由空闲对象驱逐者(如果有)验证。如果一个对象验证失败,它将从池中删除。默认值为,false 并且必须设置此属性才能运行池清理器/测试线程(另请参阅timeBetweenEvictionRunsMillis ) |
spring.datasource.tomcat.validation-query | (字符串)将用于在将连接返回给调用者之前验证来自该池的连接的 SQL 查询。如果指定,此查询不必返回任何数据,它只是不能抛出SQLException . 默认值为null 。如果未指定,连接将通过 isValid() 方法进行验证。示例值为SELECT 1 ( mysql )、select 1 from dual ( oracle )、SELECT 1 (MS Sql Server) |
spring.datasource.tomcat.validation-query-timeout | (int) 连接验证查询失败前的超时时间(以秒为单位)。这通过调用java.sql.Statement.setQueryTimeout(seconds) 执行. _ 池本身不会使查询超时,它仍然由 JDBC 驱动程序来强制执行查询超时。小于或等于零的值将禁用此功能。默认值为。validationQuery -1 |
spring.datasource.tomcat.validator-class-name | (字符串)实现org.apache.tomcat.jdbc.pool.Validator 接口并提供无参数构造函数的类的名称(可能是隐式的)。如果指定,该类将用于创建一个 Validator 实例,然后使用该实例代替任何验证查询来验证连接。默认值为null 。一个示例值为com.mycompany.project.SimpleValidator 。 |
spring.datasource.tomcat.time-between-eviction-runs-millis | (int) 空闲连接验证/清理线程运行之间休眠的毫秒数。此值不应设置在 1 秒以下。它决定了我们检查空闲连接、放弃连接的频率,以及验证空闲连接的频率。默认值为5000 (5 秒)。 |
spring.datasource.tomcat.num-tests-per-eviction-run | (int) 未在 tomcat- jdbc -pool 中使用的属性。 |
spring.datasource.tomcat.min-evictable-idle-time-millis | (int) 对象在符合驱逐条件之前可以在池中闲置的最短时间。默认值为60000 (60 秒)。 |
spring.datasource.tomcat.access-to-underlying-connection-allowed | (布尔)未使用的属性。可以通过调用池连接unwrap 来实现访问。查看javax.sql.DataSource 接口,或getConnection 通过反射调用或将对象转换为javax.sql.PooledConnection |
spring.datasource.tomcat.remove-abandoned | (布尔值)标志以删除放弃的连接,如果它们超过removeAbandonedTimeout . 如果设置为 true,则如果连接的使用时间超过设置为可以从无法关闭连接的应用程序中恢复数据库连接,则该连接被视为已放弃并有资格删除。removeAbandonedTimeout 另请参见默认值为。true logAbandoned false |
spring.datasource.tomcat.remove-abandoned-timeout | (int)可以删除放弃(使用中)连接之前的超时时间(以秒为单位)。默认值为60 (60 秒)。该值应设置为您的应用程序可能具有的最长运行查询。 |
spring.datasource.tomcat.log-abandoned | (布尔)标志以记录放弃连接的应用程序代码的堆栈跟踪。由于必须生成堆栈跟踪,因此记录放弃的连接会增加每个连接借用的开销。默认值为false 。 |
spring.datasource.tomcat.connection-properties | (字符串)在建立新连接时将发送到我们的 JDBC 驱动程序的连接属性。字符串的格式必须是 [propertyName=property;]* 注意 – “user”和“password”属性将被显式传递,因此它们不需要包含在此处。默认值为null 。 |