Spring Boot 如何整合連接池
Spring Boot 整合連接池
在實際開發(fā)中應用程序與數(shù)據(jù)庫交互時,“獲得連接”或在“釋放資源”是非常消耗資源的兩個過程,為了解決如此類性能問題,通常這種情況我們采用連接池技術重用連接Connection對象,如圖1所示。

圖-1
其實Java為數(shù)據(jù)庫連接池提供了公共的接口:javax.sql.DataSource,各個廠商需要讓自己的連接池實現(xiàn)這個接口。然后我們的應用程序中耦合這個接口,便可以方便的切換不同廠商的連接池,常見的連接池有DBCP、C3P0、DRUID、HikariCP等。
通過連接池獲取連接的一個基本過程,如圖2所示:

圖-2
在圖-2中,用戶先通過DataSource對象的getConnection()方法,獲取一個連接,如果池中有連接,則直接將連接返回給用戶。如果池中沒有連接,則會調用Dirver(驅動)對象的connect方法從數(shù)據(jù)庫獲取,拿到連接后,可以將連接在連接池中也放一份,然后再將連接返回給調用用戶。
一、整合HikariCP連接池
HikariCP號稱是目前世界上最快的連接池,有江湖一哥的稱號,目前在SpringBoot工程默認推薦使用HikariCP連接池。我們在創(chuàng)建一個新項目時步驟如下:
第一步:添加依賴。
編輯項目中的pom.xml,查找MySQL Driver、JDBC API 依賴,依賴添加后,會在pom.xml文件中自動添加如下兩個依賴配置:
1.mysql數(shù)據(jù)庫驅動依賴。
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
2.spring對象jdbc支持(此時會默認幫我們下載HiKariCP連接池)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
第二步:配置連接池。
打開application.properties配置文件,添加如下內(nèi)容。
spring.datasource.url=jdbc:mysql:///dbgoods?serverTimezone=GMT%2B8&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=root
第三步:進行單元測試。
package com.cy.pj.common.datasource;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class DataSourceTests {
@Autowired
private DataSource dataSource;
@Test
public void testConnection() throws Exception{
System.out.println(dataSource.getConnection());
}
}
第四步:原理分析,如圖-3所示。

圖-3
在圖-3中,演示了我們在測試類DataSourceTests中基于DataSource獲取連接的一個基本過程。
二、Spring Boot整合MyBatis框架
MyBatis是一個優(yōu)秀的持久層框架,底層基于JDBC實現(xiàn)與數(shù)據(jù)庫的交互。并在JDBC操作的基礎上做了封裝的優(yōu)化,他借助靈活的SQL定制,參數(shù)以及結果集的映射方式,更好的適應了當前互聯(lián)網(wǎng)技術的發(fā)展。MyBatis框架的簡單應用框架,如圖-4所示:

圖-4
在當前互聯(lián)網(wǎng)應用項目中,MyBatis框架通常會由spring框架進行資源整合,作為技術層實現(xiàn)數(shù)據(jù)交互操作。
1、初始配置
添加mybatis啟動依賴
參考mybatis官網(wǎng),找到springboot菜單選項。基于菜單項找到MyBatis啟動依賴。
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency>
注意: 在添加此依賴時,一定指定其版本(version),因為在springboot默認配置中沒有設置mybatis框架版本。
2、MyBatis簡易配置
我們添加了mybatis依賴后,spring框架啟動時會對mybatis進行自動配置。例如SqlSessionFactory工廠對象的創(chuàng)建。想要對mybatis進行簡易配置是在application.properties文件中進行
mybatis.configuration.default-statement-timeout=30 mybatis.configuration.map-underscore-to-camel-case=true
配置mybatis中的sql日志的輸出:
logging.level.com.cy=DEBUG
3、業(yè)務分析
基本業(yè)務的實現(xiàn)及單元測試
基于Spring對MyBatis框架的整合,實現(xiàn)對商品庫中數(shù)據(jù)的刪除操作。
第一步:業(yè)務API架構的設計,如圖-5所示

圖-5
第二步:基于id執(zhí)行商品刪除信息,業(yè)務時序見圖-6

圖-6
業(yè)務進階分析及實現(xiàn)
在MyBatis框架中定義SQL映射的方式有兩種:一種是將SQL映射定義在我們的xml映射文件中,一種是借助注解將其聲明在接口方法上。我們在實際項目中對于簡單的SQL映射可以直接以注解的方式進行聲明即可,復雜SQL還是要寫到xml中,充分利用動態(tài)SQL進行設計會更好些。
三、Spring Boot整合SpringMVC應用
概述
MVC(Model-view-controller)是軟件工程中的一種軟件架構模式,基于此模式把軟件系統(tǒng)分為三個基本部分:模型(Model)、試圖(view)和控制器(Controller)。目的是通過這樣的設計使程序結構更簡潔、直觀,降低問題的復雜程度。其中各個組成部分的職責為:
視圖(view):--UI設計人員進行圖形界面的設計,負責實現(xiàn)與用戶交互。
控制器(controller):--負責獲取請求,處理請求,響應結果。
模塊(model):--實現(xiàn)業(yè)務邏輯,數(shù)據(jù)邏輯。
我們在軟件設計時,通常要遵循一定的設計原則。MVC架構迷失的設計中,首先基于單一職責原則讓每個對象各司其職。再通過"高內(nèi)聚,低耦合"的設計思想實現(xiàn)相關對象之間的交互,這樣可以更好的提高程序可維護性和可擴展性。
Java EE 技術體系中,MVC設計思想的實現(xiàn)如圖所示。

圖-7
在圖7中,Servlet充當MVC中的Controller,負責調用model處理業(yè)務,負責轉發(fā)或重定向到某個頁面,在頁面上呈現(xiàn)數(shù)據(jù)。模塊封裝了對Servlet的技術應用,簡化了程序員對請求和響應過程中數(shù)據(jù)的處理。Spring MVC是Spring框架中基于MVC設計思想實現(xiàn)的一個用于處理Web請求的模塊。
以上就是Spring Boot 如何整合連接池的詳細內(nèi)容,更多關于Spring Boot 整合連接池的資料請關注腳本之家其它相關文章!
相關文章
Java并發(fā)工具類CountDownLatch CyclicBarrier使用詳解
這篇文章主要為大家介紹了Java并發(fā)工具類CountDownLatch CyclicBarrier使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
SpringBoot參數(shù)校驗之@Valid的使用詳解
這篇文章主要通過示例為大家詳細介紹一下介紹了SpringBoot參數(shù)校驗中@Valid的使用方法,文中的示例代碼講解詳細,需要的可以參考一下2022-06-06
使用nexus3.X上傳本地jar包并且通過pom讀取的解決方案(全網(wǎng)最新)
這篇文章主要介紹了使用nexus3.X上傳本地jar包并且通過pom讀取的解決方案(全網(wǎng)最新),本文內(nèi)容有點長,結合圖文實例給大家講解的非常詳細,需要的朋友可以參考下2023-11-11
java注解實現(xiàn)websocket服務的兩種方式
Java WebSocket是一種基于TCP協(xié)議的雙向全雙工消息傳輸技術,它允許服務器和客戶端之間實時通信,具有低延遲和高效率的特點,下面這篇文章主要給大家介紹了關于java注解實現(xiàn)websocket服務的兩種方式,需要的朋友可以參考下2024-08-08

