SpringBoot JDBC

Spring Boot JDBC 提供了用于將應(yīng)用程序與JDBC連接的啟動程序和庫。

在Spring Boot JDBC中,與數(shù)據(jù)庫相關(guān)的Bean(例如 DataSource,JdbcTemplate NamedParameterJdbcTemplate )會在啟動期間自動配置并創(chuàng)建。如果我們想使用它們,我們可以自動裝配這些類。例如:

@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
private NamedParameterJdbcTemplate jdbcTemplate;

application.properties 文件中,我們配置 DataSource 連接池。 Spring Boot 默認(rèn)選擇 tomcat 池。

JDBC連接池

JDBC連接池是一種管理 多個(gè)數(shù)據(jù)庫連接請求的機(jī)制。換句話說,它促進(jìn)了連接重用,即數(shù)據(jù)庫連接的內(nèi)存緩存,稱為 連接池。連接池模塊將其維護(hù)為任何標(biāo)準(zhǔn)JDBC驅(qū)動程序產(chǎn)品之上的一層。

Spring Boot jdbc

它可以提高數(shù)據(jù)訪問速度并減少應(yīng)用程序的數(shù)據(jù)庫連接數(shù)。它還可以提高應(yīng)用程序的性能。連接池執(zhí)行以下任務(wù):

管理可用連接 分配新連接 關(guān)閉連接 Spring Boot jdbc

在上圖中,有 客戶端,一個(gè)連接池(具有四個(gè)可用連接)和 1個(gè)數(shù)據(jù)源。

在第一個(gè)圖中,三個(gè)客戶端連接了不同的連接,并且連接可用。在第二個(gè)圖中,客戶端3已斷開連接,并且該連接可用。

當(dāng)客戶端完成工作時(shí),它將釋放該連接,并且該連接可用于其他客戶端。

HikariCP

SpringBoot 2中的默認(rèn)連接池為 HikariCP 。它提供了企業(yè)就緒的功能和更好的性能。 HikariCP是JDBC數(shù)據(jù)源實(shí)現(xiàn),提供了連接池機(jī)制。

如果HikariCP存在于類路徑中,則Spring Boot會自動對其進(jìn)行配置。 如果在類路徑中未找到HikariCP,則Spring Boot將查找 Tomcat JDBC連接池。 如果在Spring Boot的類路徑中,則將其拾取。 如果以上兩個(gè)選項(xiàng)都不可用,則Spring Boot選擇 Apache Commons DBCP2 作為JDBC連接池。

如果我們不想使用默認(rèn)連接池,我們還可以手動配置連接池。假設(shè)我們要使用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 來明確指定連接池?cái)?shù)據(jù)源。

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

我們已經(jīng)建立了Tomcat連接池?,F(xiàn)在,我們將在 application.properties 中添加一些屬性,以優(yōu)化其性能并滿足某些特定要求。

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 數(shù)據(jù)庫,我們需要在應(yīng)用程序的類路徑中包括JDBC驅(qū)動程序:

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

此后,在 application.properties 文件中定義 datasoure 屬性。

如果使用的是 MySQL,請使用以下屬性數(shù)據(jù)庫:

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

如果使用的是 Oracle 數(shù)據(jù)庫,請使用以下屬性:

spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl
spring.datasource.username=system
spring.datasource.password=Password123
注意: 默認(rèn)情況下,Spring Boot 2使用HikariCP作為數(shù)據(jù)庫連接池。如果在類路徑中沒有HikariCP,Spring Boot默認(rèn)會選擇tomcat池。

為什么要使用Spring Boot JDBC?

Spring JDBC 和Spring Boot JDBC的實(shí)現(xiàn)是相同的。與Spring JDBC相比,Spring Boot JBDC具有以下優(yōu)點(diǎn):

Spring Boot JDBC Spring JDBC
僅需要一個(gè) spring-boot-starter-jdbc 依賴項(xiàng)。在Spring JDBC中,需要配置多個(gè)依賴項(xiàng),例如 spring-jdbc spring-context。
如果未明確維護(hù),它將自動配置Datasource bean。如果不想使用bean,可以將屬性 spring.datasource.initialize 設(shè)置為 false 在Spring JDBC中,必須使用 XML javaconfig 創(chuàng)建數(shù)據(jù)庫Bean。
我們不需要注冊模板bean,因?yàn)镾pring Boot自動注冊了bean。必須注冊模板bean,例如 PlatformTransactionManager,JDBCTemplate,NamedParameterJdbcTemplate
.sql文件中存儲的所有數(shù)據(jù)庫初始化腳本都會自動執(zhí)行。如果在SQL文件中創(chuàng)建了任何數(shù)據(jù)庫初始化腳本(例如刪除或創(chuàng)建表),則需要在配置中顯式提供此信息。

JDBC vs. Hibernate

JDBC Hibernate
JDBC是一種技術(shù)。Hibernate是一個(gè) ORM 框架。
在JDBC中,用戶負(fù)責(zé)創(chuàng)建和關(guān)閉連接。在Hibernate中,運(yùn)行時(shí)系統(tǒng)負(fù)責(zé)創(chuàng)建和關(guān)閉連接。
它不支持延遲加載。它支持延遲加載,從而提供更好的性能。
它不支持關(guān)聯(lián)(兩個(gè)單獨(dú)的類之間的連接)。它支持關(guān)聯(lián)。

在下一部分中,我們將學(xué)習(xí)Spring Boot應(yīng)用程序中MySQL的連接性。


丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清