<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Boot 整合連接池

          共 3204字,需瀏覽 7分鐘

           ·

          2020-11-02 08:46

          作者:_我姓李

          來(lái)源:SegmentFault 思否社區(qū)




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



          圖-1


          其實(shí)Java為數(shù)據(jù)庫(kù)連接池提供了公共的接口:javax.sql.DataSource,各個(gè)廠商需要讓自己的連接池實(shí)現(xiàn)這個(gè)接口。然后我們的應(yīng)用程序中耦合這個(gè)接口,便可以方便的切換不同廠商的連接池,常見(jiàn)的連接池有DBCP、C3P0、DRUID、HikariCP等。


          通過(guò)連接池獲取連接的一個(gè)基本過(guò)程,如圖2所示:



          圖-2


          在圖-2中,用戶先通過(guò)DataSource對(duì)象的getConnection()方法,獲取一個(gè)連接,如果池中有連接,則直接將連接返回給用戶。如果池中沒(méi)有連接,則會(huì)調(diào)用Dirver(驅(qū)動(dòng))對(duì)象的connect方法從數(shù)據(jù)庫(kù)獲取,拿到連接后,可以將連接在連接池中也放一份,然后再將連接返回給調(diào)用用戶。




          一、整合HikariCP連接池


          HikariCP號(hào)稱是目前世界上最快的連接池,有江湖一哥的稱號(hào),目前在SpringBoot工程默認(rèn)推薦使用HikariCP連接池。我們?cè)趧?chuàng)建一個(gè)新項(xiàng)目時(shí)步驟如下:


          第一步:添加依賴。


          編輯項(xiàng)目中的pom.xml,查找MySQL Driver、JDBC API 依賴,依賴添加后,會(huì)在pom.xml文件中自動(dòng)添加如下兩個(gè)依賴配置:


          1.mysql數(shù)據(jù)庫(kù)驅(qū)動(dòng)依賴。

              mysql    mysql-connector-java    runtime


          2.spring對(duì)象jdbc支持(此時(shí)會(huì)默認(rèn)幫我們下載HiKariCP連接池)

                  org.springframework.boot          spring-boot-starter-jdbc




          第二步:配置連接池。


          打開(kāi)application.properties配置文件,添加如下內(nèi)容。

          spring.datasource.url=jdbc:mysql:///dbgoods?serverTimezone=GMT%2B8&characterEncoding=utf8
          spring.datasource.username=root
          spring.datasource.password=root




          第三步:進(jìn)行單元測(cè)試。


          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;
          @SpringBootTestpublic class DataSourceTests {
          @Autowired private DataSource dataSource; @Test public void testConnection() throws Exception{ System.out.println(dataSource.getConnection()); }}


          第四步:原理分析,如圖-3所示。



          圖-3


          在圖-3中,演示了我們?cè)跍y(cè)試類DataSourceTests中基于DataSource獲取連接的一個(gè)基本過(guò)程。




          二、Spring Boot整合MyBatis框架


          MyBatis是一個(gè)優(yōu)秀的持久層框架,底層基于JDBC實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的交互。并在JDBC操作的基礎(chǔ)上做了封裝的優(yōu)化,他借助靈活的SQL定制,參數(shù)以及結(jié)果集的映射方式,更好的適應(yīng)了當(dāng)前互聯(lián)網(wǎng)技術(shù)的發(fā)展。MyBatis框架的簡(jiǎn)單應(yīng)用框架,如圖-4所示:



          圖-4


          在當(dāng)前互聯(lián)網(wǎng)應(yīng)用項(xiàng)目中,MyBatis框架通常會(huì)由spring框架進(jìn)行資源整合,作為技術(shù)層實(shí)現(xiàn)數(shù)據(jù)交互操作。


          1、初始配置


          添加mybatis啟動(dòng)依賴
          參考mybatis官網(wǎng),找到springboot菜單選項(xiàng)。基于菜單項(xiàng)找到MyBatis啟動(dòng)依賴。

              
                      org.mybatis.spring.boot            mybatis-spring-boot-starter            2.1.1    


          注意:?在添加此依賴時(shí),一定指定其版本(version),因?yàn)樵趕pringboot默認(rèn)配置中沒(méi)有設(shè)置mybatis框架版本。


          2、MyBatis簡(jiǎn)易配置


          我們添加了mybatis依賴后,spring框架啟動(dòng)時(shí)會(huì)對(duì)mybatis進(jìn)行自動(dòng)配置。例如SqlSessionFactory工廠對(duì)象的創(chuàng)建。想要對(duì)mybatis進(jìn)行簡(jiǎn)易配置是在application.properties文件中進(jìn)行:


          mybatis.configuration.default-statement-timeout=30mybatis.configuration.map-underscore-to-camel-case=true


          配置mybatis中的sql日志的輸出:


          logging.level.com.cy=DEBUG


          3、業(yè)務(wù)分析


          基本業(yè)務(wù)的實(shí)現(xiàn)及單元測(cè)試


          基于Spring對(duì)MyBatis框架的整合,實(shí)現(xiàn)對(duì)商品庫(kù)中數(shù)據(jù)的刪除操作。


          第一步:業(yè)務(wù)API架構(gòu)的設(shè)計(jì),如圖-5所示


          圖-5


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


          圖-6


          業(yè)務(wù)進(jìn)階分析及實(shí)現(xiàn)


          在MyBatis框架中定義SQL映射的方式有兩種:一種是將SQL映射定義在我們的xml映射文件中,一種是借助注解將其聲明在接口方法上。我們?cè)趯?shí)際項(xiàng)目中對(duì)于簡(jiǎn)單的SQL映射可以直接以注解的方式進(jìn)行聲明即可,復(fù)雜SQL還是要寫到xml中,充分利用動(dòng)態(tài)SQL進(jìn)行設(shè)計(jì)會(huì)更好些。




          三、Spring Boot整合SpringMVC應(yīng)用


          概述


          MVC(Model-view-controller)是軟件工程中的一種軟件架構(gòu)模式,基于此模式把軟件系統(tǒng)分為三個(gè)基本部分:模型(Model)、試圖(view)和控制器(Controller)。目的是通過(guò)這樣的設(shè)計(jì)使程序結(jié)構(gòu)更簡(jiǎn)潔、直觀,降低問(wèn)題的復(fù)雜程度。其中各個(gè)組成部分的職責(zé)為:


          視圖(view):--UI設(shè)計(jì)人員進(jìn)行圖形界面的設(shè)計(jì),負(fù)責(zé)實(shí)現(xiàn)與用戶交互。


          控制器(controller):--負(fù)責(zé)獲取請(qǐng)求,處理請(qǐng)求,響應(yīng)結(jié)果。


          模塊(model):--實(shí)現(xiàn)業(yè)務(wù)邏輯,數(shù)據(jù)邏輯。


          我們?cè)谲浖O(shè)計(jì)時(shí),通常要遵循一定的設(shè)計(jì)原則。MVC架構(gòu)迷失的設(shè)計(jì)中,首先基于單一職責(zé)原則讓每個(gè)對(duì)象各司其職。再通過(guò)"高內(nèi)聚,低耦合"的設(shè)計(jì)思想實(shí)現(xiàn)相關(guān)對(duì)象之間的交互,這樣可以更好的提高程序可維護(hù)性和可擴(kuò)展性。


          Java EE 技術(shù)體系中,MVC設(shè)計(jì)思想的實(shí)現(xiàn)如圖所示。


          圖-7


          在圖7中,Servlet充當(dāng)MVC中的Controller,負(fù)責(zé)調(diào)用model處理業(yè)務(wù),負(fù)責(zé)轉(zhuǎn)發(fā)或重定向到某個(gè)頁(yè)面,在頁(yè)面上呈現(xiàn)數(shù)據(jù)。模塊封裝了對(duì)Servlet的技術(shù)應(yīng)用,簡(jiǎn)化了程序員對(duì)請(qǐng)求和響應(yīng)過(guò)程中數(shù)據(jù)的處理。Spring MVC是Spring框架中基于MVC設(shè)計(jì)思想實(shí)現(xiàn)的一個(gè)用于處理Web請(qǐng)求的模塊。





          點(diǎn)擊左下角閱讀原文,到?SegmentFault 思否社區(qū)?和文章作者展開(kāi)更多互動(dòng)和交流。

          -?END -

          瀏覽 29
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久热国产在线观看 | 人人爱人人射 | 精品人伦一区二区三区蜜桃网站 | 亚洲一区二区三区乱伦电影 | 99热在线观看 |