本文概述
Spring Boot JDBC提供了用于将应用程序与JDBC连接的启动程序和库。
在Spring Boot JDBC中, 与数据库相关的bean(例如DataSource, JdbcTemplate和NamedParameterJdbcTemplate)会在启动期间自动配置并创建。如果要使用它们, 我们可以自动连接这些类。例如:
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
private 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连接池。
如果我们不想使用默认的连接池, 我们也可以手动配置连接池。假设我们要使用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>
上面的方法允许我们使用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=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文件中定义datasoure属性。
如果使用的是MySQL数据库, 请使用以下属性:
spring.datasource.url=jdbc:mysql://192.168.1.4:3306/test
spring.datasource.username=srcmini
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 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 |
---|---|
JDBC是一项技术。 | Hibernate是一个ORM框架。 |
在JDBC中, 用户负责创建和关闭连接。 | 在Hibernate中, 运行时系统负责创建和关闭连接。 |
它不支持延迟加载。 | 它支持延迟加载, 从而提供更好的性能。 |
它不支持关联(两个单独的类之间的连接)。 | 它支持关联。 |
在下一节中, 我们将学习Spring Boot应用程序中MySQL的连接性。
评论前必须登录!
注册