Spring Boot JDBC 提供了用于将应用程序与JDBC连接的启动程序和库。
在Spring Boot JDBC中,与数据库相关的Bean(例如 DataSource,JdbcTemplate 和 NamedParameterJdbcTemplate )会在启动期间自动配置并创建。如果我们想使用它们,我们可以自动装配这些类。例如:
@Autowired JdbcTemplate jdbcTemplate; @Autowired private NamedParameterJdbcTemplate jdbcTemplate;
在 application.properties 文件中,我们配置 DataSource 和 连接池。 Spring Boot 默认选择 tomcat 池。
JDBC连接池是一种管理 多个数据库连接请求的机制。换句话说,它促进了连接重用,即数据库连接的内存缓存,称为 连接池。连接池模块将其维护为任何标准JDBC驱动程序产品之上的一层。
它可以提高数据访问速度并减少应用程序的数据库连接数。它还可以提高应用程序的性能。连接池执行以下任务:
管理可用连接 分配新连接 关闭连接
在上图中,有 客户端,一个连接池(具有四个可用连接)和 1个数据源。
在第一个图中,三个客户端连接了不同的连接,并且连接可用。在第二个图中,客户端3已断开连接,并且该连接可用。
当客户端完成工作时,它将释放该连接,并且该连接可用于其他客户端。
SpringBoot 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=nhooo spring.datasource.password=password
如果使用的是 Oracle 数据库,请使用以下属性:
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl spring.datasource.username=system spring.datasource.password=Password123
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。 | 必须注册模板bean,例如 PlatformTransactionManager,JDBCTemplate,NamedParameterJdbcTemplate 。 |
.sql文件中存储的所有数据库初始化脚本都会自动执行。 | 如果在SQL文件中创建了任何数据库初始化脚本(例如删除或创建表),则需要在配置中显式提供此信息。 |
JDBC | Hibernate |
JDBC是一种技术。 | Hibernate是一个 ORM 框架。 |
在JDBC中,用户负责创建和关闭连接。 | 在Hibernate中,运行时系统负责创建和关闭连接。 |
它不支持延迟加载。 | 它支持延迟加载,从而提供更好的性能。 |
它不支持关联(两个单独的类之间的连接)。 | 它支持关联。 |
在下一部分中,我们将学习Spring Boot应用程序中MySQL的连接性。