本文概述
- JDBC连接池
- 为什么要使用Spring Boot JDBC?
- JDBC与Hibernate
在Spring Boot JDBC中, 与数据库相关的bean(例如DataSource, JdbcTemplate和NamedParameterJdbcTemplate)会在启动期间自动配置并创建。如果要使用它们, 我们可以自动连接这些类。例如:
@AutowiredJdbcTemplate jdbcTemplate;
@Autowiredprivate NamedParameterJdbcTemplate jdbcTemplate;
在application.properties文件中, 我们配置数据源和连接池。 Spring Boot默认选择tomcat池。
JDBC连接池 JDBC连接池是一种管理多个数据库连接请求的机制。换句话说, 它有助于连接重用, 这是数据库连接的内存缓存, 称为连接池。连接池模块将其维护为任何标准JDBC驱动程序产品之上的一层。
文章图片
它提高了数据访问的速度, 并减少了应用程序的数据库连接数。它还可以提高应用程序的性能。连接池执行以下任务:
- 管理可用的连接
- 分配新的连接
- 紧密连接
文章图片
在上图中, 有客户端, 一个连接池(具有四个可用连接)和一个数据源。
在第一个图中, 三个客户端连接了不同的连接, 并且一个连接可用。在第二张图中, 客户端3已断开连接, 并且该连接可用。
客户端完成工作后, 它将释放连接, 该连接可用于其他客户端。
光ikaCP
Spring Boot 2中的默认连接池是HikariCP。它提供了企业就绪的功能和更好的性能。 HikariCP是提供连接池机制的JDBC数据源实现。
- 如果HikariCP存在于类路径中, 则Spring Boot会自动对其进行配置。
- 如果在类路径上找不到HikariCP, Spring Boot将寻找Tomcat JDBC连接池。如果它在类路径Spring Boot上, 则将其拾取。
- 如果以上两个选项都不可用, 则Spring Boot选择Apache Commons DBCP2作为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>
9.0.10<
/version>
<
/dependency>
<
dependency>
<
groupId>
com.h2database<
/groupId>
<
artifactId>
h2<
/artifactId>
<
version>
1.4.9<
/version>
<
socpe>
runtime<
/scoope>
<
/dependency>
【Spring Boot JDBC项目示例图解】上面的方法允许我们使用Tomcat连接池, 而不必编写@Configuration类并以编程方式定义DataSource bean。
另一方面, 我们也可以跳过Spring Boot使用的连接池扫描算法。我们可以通过在application.properties文件中添加属性spring.datasource.type来显式指定连接池数据源。
Spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
我们已经建立了Tomcat连接池。现在, 我们将在application.properties中添加一些属性, 以优化其性能并满足某些特定要求。
spring.datasource.tomcat.initial-size=20spring.datasource.tomcat.max-wait=25000spring.datasource.tomcat.max-active=70spring.datasource.tomcat.max-idle=20spring.datasource.tomcat.min-idle=9spring.datasource.tomcat.default-auto-commit=true
如果要连接到MySQL数据库, 则需要在应用程序的类路径中包括JDBC驱动程序:
<
!-- MySQL JDBC driver -->
<
dependency>
<
groupId>
mysql<
/groupId>
<
artifactId>
mysql-connector-java<
/artifactId>
<
/dependency>
之后, 在application.properties文件中定义datasoure属性。
如果使用的是MySQL数据库, 请使用以下属性:
spring.datasource.url=jdbc:mysql://192.168.1.4:3306/testspring.datasource.username=srcminispring.datasource.password=password
如果使用的是Oracle数据库, 请使用以下属性:
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orclspring.datasource.username=systemspring.datasource.password=Password123
注意:默认情况下, Spring Boot 2使用HikariCP作为数据库连接池。如果类路径中不存在HikariCP, 则Spring Boot默认情况下会选择tomcat池。 为什么要使用Spring Boot JDBC? 除了实现之外, Spring JDBC和Spring Boot JDBC的功能相同。与Spring JDBC相比, Spring Boot JBDC具有以下优点:
Spring Boot JDBC | Spring JDBC |
---|---|
仅需要spring-boot-starter-jdbc依赖项。 | 在Spring JDBC中, 需要配置多个依赖项, 例如spring-jdbc和spring-context。 |
如果未明确维护, 它将自动配置Datasource bean。如果不想使用bean, 可以将spring.datasource.initialize属性设置为false。 | 在Spring JDBC中, 必须使用XML或javaconfig创建数据库Bean。 |
我们不需要注册模板bean, 因为Spring Boot自动注册bean。 | 必须注册Template Bean, 例如PlatformTransactionManager, JDBCTemplate, NamedParameterJdbcTemplate。 |
存储在.sql文件中的所有数据库初始化脚本都会自动执行。 | 如果在SQL文件中创建了任何数据库初始化脚本(如删除或创建表), 则需要在配置中显式提供此信息。 |
JDBC | Hibernate |
---|---|
JDBC是一项技术。 | Hibernate是一个ORM框架。 |
在JDBC中, 用户负责创建和关闭连接。 | 在Hibernate中, 运行时系统负责创建和关闭连接。 |
它不支持延迟加载。 | 它支持延迟加载, 从而提供更好的性能。 |
它不支持关联(两个单独的类之间的连接)。 | 它支持关联。 |
推荐阅读
- Spring Boot打包文件格式(JAR、WAR、EAR)
- Spring Boot自动配置项目示例图文详解
- Spring Boot Hello World示例(图文)
- Spring Boot下载并安装STS IDE详细步骤图解
- Spring Boot CLI创建并运行Web项目
- Spring Boot依赖管理详细介绍
- Spring Boot DevTools用法示例图解
- Android 开源框架 ( 六 ) Volley --- Google的轻量级网络通信框架
- MyBatis框架浅析之 Mapper.xml 映射文件