在 Spring Boot 上配置 Tomcat 连接池

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 )

  • NONE
  • READ_COMMITTED
  • READ_UNCOMMITTED
  • REPEATABLE_READ
  • SERIALIZABLE

如果未设置,则不会调用该方法,默认为 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) 应始终保留在池中的最大连接数。默认值是maxActive100定期检查空闲连接(如果启用),空闲时间超过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另请参见默认值为。truelogAbandonedfalse
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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
dynamic-datasource-spring-boot-starter 是一个 Spring Boot 的数据源动态切换组件,可以方便地实现多数据源的配置和切换。它支持常见的连接池,如 HikariCP、Tomcat JDBC 等。 以下是使用 dynamic-datasource-spring-boot-starter 配置连接池的步骤: 1. 添加依赖 在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>2.5.1</version> </dependency> ``` 2. 配置数据源 在 application.yml 文件中配置数据源,例如: ```yml spring: datasource: dynamic: primary: db1 datasource: db1: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10 username: root password: root db2: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10 username: root password: root ``` 此处配置了两个数据源 db1 和 db2,其中 db1 为主数据源。 3. 配置连接池 在 application.yml 文件中配置连接池,例如: ```yml spring: datasource: type: com.zaxxer.hikari.HikariDataSource hikari: maximum-pool-size: 10 minimum-idle: 5 idle-timeout: 60000 connection-timeout: 30000 auto-commit: true pool-name: HikariCP max-lifetime: 1800000 connection-test-query: SELECT 1 ``` 此处使用了 HikariCP 连接池配置连接池的一些参数,如最大连接数、最小空闲连接数、连接空闲超时时间等。 4. 注册数据源 在 Spring Boot 启动类中注册数据源,例如: ```java @SpringBootApplication @MapperScan(basePackages = "com.example.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean @ConfigurationProperties("spring.datasource.hikari") public DataSource dataSource() { return DataSourceBuilder.create().type(HikariDataSource.class).build(); } @Bean public DataSourceProvider dataSourceProvider(DataSource dataSource) { return new SingleDataSourceProvider(dataSource); } @Bean public DynamicDataSourceCreator dynamicDataSourceCreator(DataSourceProvider dataSourceProvider) { DynamicDataSourceCreator creator = new DynamicDataSourceCreator(); creator.setDataSourceProvider(dataSourceProvider); return creator; } @Bean public DynamicDataSourceRegister dynamicDataSourceRegister(DynamicDataSourceCreator dynamicDataSourceCreator) { DynamicDataSourceRegister register = new DynamicDataSourceRegister(); register.setDynamicDataSourceCreator(dynamicDataSourceCreator); return register; } } ``` 此处使用了 HikariCP 连接池,使用了 @ConfigurationProperties 注解将连接池配置读取到 DataSource 中,然后将 DataSource 注册到 DynamicDataSourceProvider 中,最后通过 DynamicDataSourceCreator 和 DynamicDataSourceRegister 将数据源注册到 Spring 中。 至此,我们已经完成了 dynamic-datasource-spring-boot-starter 的连接池配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值