📜  Spring Boot JDBC

📅  最后修改于: 2021-01-11 05:32:07             🧑  作者: Mango

Spring Boot JDBC

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驱动程序产品之上的一层。

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

  • 管理可用的连接
  • 分配新连接
  • 紧密连接

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

在第一个图中,三个客户端连接了不同的连接,并且一个连接可用。在第二张图中,客户端3已断开连接,并且该连接可用。

客户端完成工作后,它将释放连接,该连接可用于其他客户端。

光明CP

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依赖性,如下所示。


org.springframework.boot
spring-boot-starter-data-jpa


com.zaxxer
HikariCP




org.apache.tomcat
tomcat-jdbc
9.0.10


com.h2database
h2
1.4.9
runtime

上面的方法允许我们使用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
mysql-connector-java
   

之后,在application.properties文件中定义datasoure属性。

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

spring.datasource.url=jdbc:mysql://192.168.1.4:3306/test
spring.datasource.username=javatpoint
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
There is only a spring-boot-starter-jdbc dependency is required. In Spring JDBC, multiple dependencies need to be configured like spring-jdbc and spring-context.
It automatically configures Datasource bean, if not maintain explicitly. If we do not want to use the bean, we can set a property spring.datasource.initialize to false. In Spring JDBC, it is necessary to create a database bean either using XML or javaconfig.
We do not need to register Template beans because Spring Boot automatically registers beans. The Template beans such as PlatformTransactionManager, JDBCTemplate, NamedParameterJdbcTemplate must be registered.
Any db initialization scripts stored in .sql file gets executed automatically. If any db initialization scripts like dropping or creation of tables are created in SQL file, this info needs to be given explicitly in the configuration.

JDBC与Hibernate

JDBC Hibernate
JDBC is a technology. Hibernate is an ORM framework.
In JDBC, the user is responsible for creating and closing the connections. In Hibernate, the run time system takes care of creating and closing the connections.
It does not support lazy loading. It supports lazy loading that offers better performance.
It does not support associations (the connection between two separate classes). It supports associations.

在下一节中,我们将学习Spring Boot应用程序中MySQL的连接性。