【Spring】数据库连接池及其在Spring中如何配置

什么是数据库连接池:

定义:数据库连接池(Database Connection Pooling):数据库连接池是计算机内存中的一块内存,它存储了一些已经创建好的数据库连接对象。数据库连接池负责创建数据库连接,还负责分配、管理和释放数据库连接。
原理

  • 当程序初始化时创建一定数量的连接对象;
  • 应用程序需要访问数据库时,就从数据库连接池中获得一个创建好的连接对象,应用程序结束访问后,释放的连接对象回到空闲状态等待下次被使用;
  • 如果应用程序请求链接对象时,已经创建的连接对象都处于使用状态,数据库连接池将会创建新的连接对象给该用户使用;
  • 如果数据库连接池的连接对象数量等于最大连接数了,那么数据库连接池就不会再创建新的连接对象了,应用程序只能等待有空闲的连接对象;
  • 数据库连接池中空闲时间超过最大空闲时间的连接对象将会被删除,直到剩下最小连接数的连接对象。

最小连接数:程序初始化时会创建这个数量的连接对象,数据库连接池中最少会有的这个数量的连接对象,只要连接对象等于这个数,即使连接对象空闲时间超过了最大空闲时间也不会被删除。
最大连接数:数据库连接池的容量。即使需要使用连接对象的应用程序再多,数据库连接池也不会创建超过这个数量的连接对象。
最大空闲时间:连接对象也是需要占用内存的,如果数据库连接池中的连接对象的空闲时间超过这个时间,那么它将会被删除,除非数据库连接池中的连接对象数量等于最小连接数。

为什么使用数据库连接池:

创建和释放数据库连接是一个很耗时的操作,频繁地进行这样的操作将占用大量的性能开销,进而导致网站的响应速度下降,严重的时候可能导致服务器崩溃。而使用数据库连接池可以在很大程度上缓解这个问题。

有哪些常用的连接池:
  • DBCP:DBCP(DataBase connection pool)数据库连接池是apache上的一个 java连接池项目,也是 tomcat使用的连接池组件;单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar.dbcp没有自动回收空闲连接的功能。前往官网
  • C3P0:C3P0是一个开源的jdbc连接池,它实现了数据源和jndi绑定,支持jdbc3规范和jdbc2的标准扩展。c3p0是异步操作的,缓慢的jdbc操作通过帮助进程完成。扩展这些操作可以有效的提升性能。目前使用它的开源项目有Hibernate,Spring等。c3p0有自动回收空闲连接功能。注: JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口。前往官网
  • Druid:Druid数据库连接池是阿里巴巴开源平台上的一个开源项目,该连接池性能高效,简单SQL语句用时10微秒以内,复杂SQL用时30微秒。前往官网
  • HikariCP:HikariCP数据库连接池尽管是后起之秀,但却PK掉其它数据库连接池技术,成为目前速度最快的数据库连接池,SpringBoot2.0也已经采用HikariCP作为默认连接池配置。前往官网
Spring如何配置数据库连接池:以HikariCP为例

导入jar包是必不可少的环节…不再详述,只说如何配置…

方式一:

在spring的xml核心配置文件中配置:

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" lazy-init="false" destroy-method="close">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
	<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/mytest?characterEncoding=utf8"></property>
	<property name="username" value="root"></property>
	<property name="password" value="1234"></property>
	<!-- 连接只读数据库时配置为true, 保证安全 -->
	<property name="readOnly" value="false" /> 
	<!-- 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 -->
	<property name="connectionTimeout" value="30000" /> 
	<!-- 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 -->
	<property name="idleTimeout" value="600000" /> 
	<!-- 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like '%timeout%';) -->
	<property name="maxLifetime" value="1800000" /> 
	<!-- 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count) -->
	<property name="maximumPoolSize" value="15" />
</bean>
方式二:

可以将需要配置的参数写在.properties文件中,并在spring的xml核心配置文件中读取。为此Spring提供了一个PropertyPlaceholderConfigurer类,在Spring配置文件中配置PropertyPlaceholderConfigurer并为其location变量指定properties文件路径,然后即可使用${}的形式将properties文件中的配置信息读取出来。
在src目录下新建一个文件夹“config”,并在其中创建一个文件“jdbc.properties”:

driverClassName=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8
username=root
password=1234
readOnly=false
connectionTimeout=30000
idleTimeout=600000
maxLifetime=1800000
maximumPoolSize=15

此时spring的xml核心配置文件中配置方式如下:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="location" value="classpath:config/jdbc.properties"></property>
</bean>
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" lazy-init="false" destroy-method="close">
	<property name="driverClassName" value="${driverClassName}"></property>
	<property name="jdbcUrl" value="${jdbcUrl}"></property>
	<property name="username" value="${username}"></property>
	<property name="password" value="${password}"></property>
	<property name="readOnly" value="${readOnly}" /> 
	<property name="connectionTimeout" value="${connectionTimeout}" /> 
	<property name="idleTimeout" value="${idleTimeout}" /> 
	<property name="maxLifetime" value="${maxLifetime}" /> 
	<property name="maximumPoolSize" value="${maximumPoolSize}" />
</bean>

也可以不使用PropertyPlaceholderConfigurer类,而使用context:property-placeholder标签指定properties文件路径:

<context:property-placeholder location="classpath:config/jdbc.properties"/>
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot可以通过配置文件来配置数据库连接池。以下是配置步骤: 1. 在pom.xml文件添加数据库连接池依赖,如HikariCP或Druid。 2. 在application.properties或application.yml文件配置数据库连接池相关属性,如数据库URL、用户名、密码、最大连接数、最小连接数等。 3. 在Spring Boot应用程序使用JdbcTemplate或MyBatis等ORM框架来访问数据库。 例如,使用HikariCP连接池配置示例: 在pom.xml文件添加依赖: ``` <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency> ``` 在application.properties文件配置: ``` 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.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 ``` 在Spring Boot应用程序使用JdbcTemplate访问数据库: ``` @Autowired private JdbcTemplate jdbcTemplate; public void query() { List<Map<String, Object>> list = jdbcTemplate.queryForList("SELECT * FROM user"); for (Map<String, Object> map : list) { System.out.println(map); } } ``` ### 回答2: Spring Boot提供了很多开箱即用的配置,其包括配置数据库连接池。下面给出了一些在Spring Boot配置常见数据库连接池的示例。 1. 配置tomcat连接池 在pom.xml添加以下依赖: ```xml <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> <version>${tomcat-jdbc.version}</version> </dependency> ``` 在application.properties添加以下属性: ``` spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=username spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.tomcat.validation-query=SELECT 1 spring.datasource.tomcat.test-while-idle=true spring.datasource.tomcat.time-between-eviction-runs-millis=3600000 spring.datasource.tomcat.max-wait=10000 spring.datasource.tomcat.initial-size=5 spring.datasource.tomcat.max-active=20 spring.datasource.tomcat.min-idle=5 spring.datasource.tomcat.default-auto-commit=false spring.datasource.tomcat.remove-abandoned-on-borrow=true spring.datasource.tomcat.remove-abandoned-timeout=120 ``` 2. 配置Hikari连接池 在pom.xml添加以下依赖: ```xml <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>${hikaricp.version}</version> </dependency> ``` 在application.properties添加以下属性: ``` spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=username spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.hikari.maximum-pool-size=20 spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.idle-timeout=600000 spring.datasource.hikari.max-lifetime=1800000 ``` 3. 配置Druid连接池 在pom.xml添加以下依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> ``` 在application.properties添加以下属性: ``` spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=username spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.druid.initial-size=5 spring.datasource.druid.max-active=20 spring.datasource.druid.min-idle=5 spring.datasource.druid.max-wait=10000 spring.datasource.druid.remove-abandoned=true spring.datasource.druid.remove-abandoned-timeout=120 spring.datasource.druid.log-abandoned=true spring.datasource.druid.time-between-eviction-runs-millis=60000 spring.datasource.druid.min-evictable-idle-time-millis=300000 spring.datasource.druid.test-while-idle=true spring.datasource.druid.validation-query=SELECT 'x' ``` 需要注意的是,以上仅仅是不同数据库连接池的例子,实际上Spring Boot 支持多种配置方法。同时,在从以上配置示例为我们示范出这些数据库连接池的连接参数,但具体的参数应该是根据实际应用场景而定,且不应到处复制粘贴,而应根据自己当前系统的资源状况来进行合理设置。通过正确参数和合理设置合理使用数据库连接池可以最大化地提高你的应用性能和可扩展性。 ### 回答3: Spring Boot是一个非常流行的基于Spring框架的Java应用程序开发平台。配置数据库连接池对于Web应用程序来说非常重要,因为连接池可以提高数据库操作的效率和性能。Spring Boot提供方便的方式来配置和使用各种数据库连接池,包括HikariCP、Tomcat JDBC Pool、DBCP2等。 以下是使用Spring Boot配置HikariCP连接池的步骤: 1. 添加HikariCP依赖 在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency> ``` 2. 配置数据源 在application.properties添加以下数据源配置: ```properties spring.datasource.url=jdbc:mysql://localhost/testdb spring.datasource.username=dbuser spring.datasource.password=dbpass spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.hikari.maximum-pool-size=10 ``` 以上配置包括了数据库连接URL、用户名、密码、驱动类以及最大连接数等参数。HikariCP还有很多其他的配置参数可以设置,详见官方文档。 3. 使用数据源 使用Spring Boot的JdbcTemplate进行数据库操作,示例代码如下: ```java @Autowired JdbcTemplate jdbcTemplate; public void query() { List<Map<String, Object>> resultList = jdbcTemplate.queryForList("SELECT * FROM table_name"); } ``` 以上是Spring Boot配置HikariCP连接池的基本步骤。总的来说,Spring Boot提供了非常方便的方式来配置数据库连接池,开发人员无需关心太多底层细节,可以更专注于应用程序的业务逻辑实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值