Spring Boot JDBC为应用程序提供了与JDBC连接的起始器和库。

在Spring Boot JDBC中,与数据库相关的bean(如DataSource、JdbcTemplateNamedParameterJdbcTemplate)在启动时自动配置并创建。如果我们想使用它,我们可以进行自动装配这些类。例如:

@Autowired  
JdbcTemplate jdbcTemplate;  
@Autowired  
private NamedParameterJdbcTemplate jdbcTemplate;  

application.properties文件中,我们配置DataSource连接池。Spring Boot默认选择Tomcat连接池。

JDBC连接池

JDBC连接池是一种管理多个数据库连接请求的机制。换句话说,它方便了连接的重用,数据库连接的内存缓存,称为连接池。连接池模块将其作为任何标准JDBC驱动程序产品的顶层来维护。

b454cf32812cf2ccc5342b002a10d2f.png

它提高了数据访问的速度,减少了应用程序的数据库连接数。它还改善了应用程序的性能。连接池执行以下任务:

  • 管理可用连接
  • 分配新连接
  • 关闭连接

807e6ee0198904e7192885a1d823b9d.png

在上面的图中,有客户端、一个连接池(有四个可用的连接)和一个 DataSource

在第一个图中,有三个客户端连接到不同的连接,而一个连接是可用的。在第二个图中,客户端3已断开连接,该连接可用。

当客户端完成工作时,它释放连接,该连接可以供其他客户端使用。

HikariCP

Spring Boot 2中的默认连接池是HikariCP。它提供了企业级功能和更好的性能。HikariCP是一个提供连接池机制的JDBC DataSource实现。

  • 如果在类路径上找到HikariCP,则Spring Boot会自动配置它。
  • 如果在类路径上找不到HikariCP,则Spring Boot会查找Tomcat JDBC连接池。如果它在类路径上,Spring Boot会选择它。
  • 如果上述两个选项都不可用,Spring Boot会选择Apache Commons DBCP2作为JDBC连接池。

如果我们不想使用默认的连接池,还可以手动配置连接池。假设我们想使用Tomcat JDBC连接池而不是HikariCP。我们将排除HikariCP依赖项,并在pom.xml文件中添加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>9.0.10</version>  
</dependency>  
<dependency>  
<groupId>com.h2database</groupId>  
<artifactId>h2</artifactId>  
<version>1.4.9</version>  
<socpe>runtime</scoope>  
</dependency>  

上述方法允许我们在不必编写@Configuration类和以编程方式定义DataSource bean的情况下使用Tomcat连接池。

另一方面,如果我们要跳过Spring Boot使用的连接池扫描算法,我们可以在application.properties文件中显式指定连接池数据源,通过添加属性spring.datasource.type

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource

我们已经设置了Tomcat连接池。现在,我们将在application.properties中添加一些属性,以优化其性能并适应一些特定的要求。

spring.datasource.tomcat.initial-size=20  
spring.datasource.tomcat.max-wait=25000  
spring.datasource.tomcat.max-active=70  
spring.datasource.tomcat.max-idle=20  
spring.datasource.tomcat.min-idle=9  
spring.datasource.tomcat.default-auto-commit=true  

如果我们想连接到MySQL数据库,我们需要在应用程序的类路径中包含JDBC驱动程序:

<!-- MySQL JDBC driver -->  
<dependency>  
<groupId>mysql</groupId>  
<artifactId>mysql-connector-java</artifactId>  
</dependency>     

然后,在application.properties文件中定义datasource属性。

如果使用MySQL数据库,请使用以下属性:

spring.datasource.url=jdbc:mysql://192.168.1.4:3306/test  
spring.datasource.username=javatiku  
spring.datasource.password=password  

如果使用Oracle数据库,请使用以下属性:

spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl  
spring.datasource.username=system  
spring.datasource.password=Password123  

注意:Spring Boot 2默认使用HikariCP作为数据库连接池。如果在类路径上找不到HikariCP,则Spring Boot默认选择Tomcat连接池。

为什么我们应该使用Spring Boot JDBC?

Spring JDBC和Spring Boot JDBC的功能相同,除了实现方式不同。以下是Spring Boot JBDC相对于Spring JDBC的优点:

Spring Boot JDBCSpring JDBC
只需要一个spring-boot-starter-jdbc依赖项。在Spring JDBC中,需要配置多个依赖项,如spring-jdbcspring-context
它会自动配置DataSource bean,如果没有显式维护。 如果不想使用该bean,我们可以将属性spring.datasource.initialize设置为false在Spring JDBC中,需要使用XMLjavaconfig创建数据库bean。
我们不需要注册模板bean,因为Spring Boot会自动注册bean。必须注册模板bean,如PlatformTransactionManager、JDBCTemplate、NamedParameterJdbcTemplate
存储在.sql文件中的任何数据库初始化脚本会自动执行。如果在SQL文件中创建了任何数据库初始化脚本,例如表的删除或创建,必须在配置中明确给出这些信息。

JDBC vs. Hibernate

JDBCHibernate
JDBC是一种技术Hibernate是一个ORM框架。
在JDBC中,用户负责创建和关闭连接。在Hibernate中,运行时系统负责创建和关闭连接。
它不支持延迟加载。它支持延迟加载,提供更好的性能。
它不支持关联(两个独立类之间的连接)。它支持关联。

在下一节中,我们将学习如何在Spring Boot应用程序中连接到MySQL数据库。

标签: spring, Spring教程, Spring语言学习, Spring框架, Spring框架教程, Spring框架高级教程, spring boot, spring boot入门教程, spring boot学习教程, spring boot下载, spring boot框架入门, spring boot面试题, spring boot笔试题, spring boot学习指南, spring boot技术