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連接池是一種管理 多個(gè)數(shù)據(jù)庫連接請求的機(jī)制。換句話說,它促進(jìn)了連接重用,即數(shù)據(jù)庫連接的內(nèi)存緩存,稱為 連接池。連接池模塊將其維護(hù)為任何標(biāo)準(zhǔn)JDBC驅(qū)動程序產(chǎn)品之上的一層。
它可以提高數(shù)據(jù)訪問速度并減少應(yīng)用程序的數(shù)據(jù)庫連接數(shù)。它還可以提高應(yīng)用程序的性能。連接池執(zhí)行以下任務(wù):
管理可用連接 分配新連接 關(guān)閉連接
在上圖中,有 客戶端,一個(gè)連接池(具有四個(gè)可用連接)和 1個(gè)數(shù)據(jù)源。
在第一個(gè)圖中,三個(gè)客戶端連接了不同的連接,并且連接可用。在第二個(gè)圖中,客戶端3已斷開連接,并且該連接可用。
當(dāng)客戶端完成工作時(shí),它將釋放該連接,并且該連接可用于其他客戶端。
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
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 | 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的連接性。