1. 程式人生 > >SpringBoot 2.X整合 jdbc自動配置原理探究

SpringBoot 2.X整合 jdbc自動配置原理探究

前言
Springboot對於資料訪問層,不管是 SQL還是 NOSQLSpring Boot 底層都是採用 Spring Data 的方式統一處理。Spring Data 是 Spring 家族中與 Spring Boot、Spring Cloud 齊名且知名專案。想要更好的瞭解Sping Data,可以參考Sping Data 官網:https://spring.io/projects/spring-data

事實上,Springboot整合jdbc基本上企業都不會這麼去使用,但是為什麼要學呢?我為什麼又要寫這麼一篇文章呢?也很簡單,就像HelloWorld程式一樣的道理,畢竟jdbc是連線資料庫最基本的基礎,不忘基礎,重視基礎,不忘初心,方得始終。

1、建立jdbc工程環境

建立的時候勾選WebjdbcMySQL即可,

pom.xml檔案預設會有如下依賴:

   <dependency>
   <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-jdbc</artifactId>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
   </dependency>

   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <scope>runtime</scope>
   </dependency>

如上搭建好之後,應該怎麼寫才可以實現資料庫的訪問呢?實際上SpringBoot中,我們只需要簡單的配置就可以實現資料庫的連線了;

2、編寫配置檔案

在application.yml配置檔案中,編寫jdbc常規配置連線

spring:
  datasource:
    username: root
    url: jdbc:mysql://localhost:3306/ufida
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

在springboot2.X版本中如果spring.datasource.url不指定時區就會報一個SQLException

錯誤

把上面的URL屬性新增時區,如下即可:

url: jdbc:mysql://localhost:3306/ufida?serverTimezone=UTC

需要注意一點的是:我現在使用的MySQL是5.7版本:

配置之後就可以直接去使用了,因為SpringBoot已經預設幫我們進行了自動配置!是不是感動到哭?

3、test測試類測試

@SpringBootTest
class JdbcbootApplicationTests {
//第一步:DI注入資料來源
    @Autowired
    DataSource dataSource;

    @Test
    void contextLoads() throws SQLException {
//第二步:測試程式碼
        System.out.println("預設使用的資料來源:" + dataSource.getClass());

        Connection connection = dataSource.getConnection();
        System.out.println("獲取的連線:" + connection);
        connection.close();
    }
}


輸出結果可以看到預設給我們配置的資料來源為 class com.zaxxer.hikari.HikariDataSource , 我們並沒有手動配置,到這裡,激起了各位的好奇心~不知道你們好不好奇,反正宜春很好奇~,於是乎全域性搜尋找到資料來源的所有自動配置都在 :DataSourceProperties 檔案下,不要問我為啥知道是在這個檔案下,給個圖你也就和我一樣知道了

接下來我們可以來探究下這裡自動配置的原理以及能配置哪些屬性了

可以看出 Spring Boot 2.2.2 預設使用 com.zaxxer.hikari.HikariDataSource 資料來源,而以前版本,比如 Spring Boot 1.5 預設使用 org.apache.tomcat.jdbc.pool.DataSource 作為資料來源;至於原因也很簡單,聽聞HikariDataSource 是當前速度最快的資料來源,相比於傳統的 C3P0 、DBCP、Tomcat jdbc 等連線池更加牛皮,因此springboot把它作為預設的資料來源了。

既然是自動配置,按照springboot的套路,估計有個DataSourceXXXAutoConfiguration的東東,全域性搜尋一下,
果不其然,有存在一個DataSourceAutoConfiguration的類,我們就來進去逛逛

無非這個類中就是一些資料來源、池什麼的自動配置,需要注意一點的就是

可以使用 spring.datasource.type 指定自定義的資料來源型別,值要使用連線池實現的完全限定名。預設情況下,它是從類路徑自動檢測的,原始碼如下:

    @Configuration
    @ConditionalOnMissingBean({DataSource.class})
    @ConditionalOnProperty(
        name = {"spring.datasource.type"}
    )
    static class Generic {
        Generic() {
        }

        @Bean
        public DataSource dataSource(DataSourceProperties properties) {
            return properties.initializeDataSourceBuilder().build();
        }
    }

OK,DataSourceAutoConfiguration的原始碼就看到這,具體的可自行檢視。

4、JdbcTemplate自動配置原理

有了資料來源HikariDataSource就可以拿到資料庫連線java.sql.Connection,有了連線就相當於可以使用連線和原生的 JDBC 語句來操作資料庫進行crud,這個點我估計都會想到JdbcTemplate,畢竟好東西都要合理利用!

這裡不可以開掛使用第三方資料庫操作框架MyBatis,實際上Spring 本身也對原生的JDBC 做了輕量級的封裝,沒錯就是 org.springframework.jdbc.core.JdbcTemplate

既然是自動配置,我們就應該想到JdbcTemplate 的自動配置原理是依賴 org.springframework.boot.autoconfigure.jdbc 包下的 ,不出意料,該包中果然有JdbcTemplateAutoConfiguration 類。如下

5、Springboot整合jdbc之後CRUD測試

既然能使用jdbcTemplate,就使用它得了,千萬記得如下自動注入操作即可

@Autowired
JdbcTemplate jdbcTemplate;

至於CRUD程式碼這裡就不再概述了,本篇文章主要探究Springboot整合jdbc自動配置原理。不管學什麼框架都不是學會配置,更重要的是思想!

如果本文對你有一點點幫助,那麼請點個讚唄,謝謝~

最後,若有不足或者不正之處,歡迎指正批評,感激不盡!如果有疑問歡迎留言,絕對第一時間回覆!

歡迎各位關注我的公眾號,裡面有一些java學習資料和一大波java電子書籍,比如說周志明老師的深入java虛擬機器、java程式設計思想、核心技術卷、大話設計模式、java併發程式設計實戰.....都是java的聖經,不說了快上Tomcat車,咋們走!最主要的是一起探討技術,嚮往技術,追求技術,說好了來了就是盆友喔...

相關推薦

SpringBoot 2.X整合 jdbc自動配置原理探究

前言 Springboot對於資料訪問層,不管是 SQL還是 NOSQL,Spring Boot 底層都是採用 Spring Data 的方式統一處理。Spring Data 是 Spring 家族中與 Spring Boot、Spring Cloud 齊名且知名專案。想要更好的瞭解Sping Data,可以

SpringBoot與資料訪問JDBC&自動配置原理(一)

1、建立專案(通過idea)這裡的mysql就是幫助我們匯入mysql驅動的。然後通過專案下的pom.xml檔案,可以發現我們匯入了下面這些依賴。我們在使用最基本的jdbc的時候,我們只要引入jdbc和mhysql驅動就可以了。2、與資料庫連線  啟動資料庫我這裡是通過php

springboot 2.* 自動配置原理探究&demo實現

springboot-2.1.0 自動配置原理解析&demo實現 前言 最近準備升級線上服務的版本到springboot 2.1.0,所以抽空重新研究學習了下springboot的一些特性、原理。本文的核心就是學習理解下springboot的自動配置原理,版本是目前springboot的最新rel

SpringBoot——web開發之SpringMVC自動配置原理

一、SpringBoot為SpringMVC提供的自動配置 2、SpringBoot為SpringMVC提供的自動配置:參考類WebMvcAutoConfiguration ①Inclusion of ContentNegotiatingViewResolver an

基於SpringBoot 2.X整合Redis

基於SpringBoot 2.X整合Redis 說明:本文旨在整理SpringBoot 2.X整合Redis基礎功能,如有問題請指出 在pom.xml檔案中引入Redis的依賴 <!-- Redis -->

基於SpringBoot 2.X整合MyBatis

SpingBoot 2.X 整合MyBatis 說明:本文旨在整理SpringBoot 2.X整合MyBatis基礎功能,如有問題請指出 目錄結構: 在pom.xml檔案中引入MyBaties的依賴 樓主這裡使用的

SpringBoot 2.x 整合Lombok

簡介 lombok是一個編譯級別的外掛,它可以在專案編譯的時候生成一些程式碼。比如日常開發過程中需要生產大量的JavaBean檔案,每個JavaBean都需要提供大量的get和set方法,如果欄位較多且發生變動的話修改起來相對繁瑣,相應的lombok可以通

SpringBoot 2.x 整合Mybatis二:PageHelper分頁

Mybatis-PageHelper 簡介 PageHelper 最方便使用的分頁外掛,支援多種資料庫: Oracle Mysql MariaDB SQLite Hsqldb PostgreSQL DB2 SqlServer(2005,2008) I

SpringBoot 2.x 整合Mybatis三:tk.mybatis

簡介 新增依賴 buildscript { ext { springBootVersion = '2.0.2.RELEASE' } rep

SpringBoot 2.x 整合Mybatis一:基礎

什麼是 MyBatis ? MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原

SpringBoot 2.x 整合 MyBatis (簡單優雅)

建立專案 兩種方式建立SpringBoot工程。 方式一:IDEA中建立SpringBoot工程,依次選擇要新增的模組。 方式二:通過訪問 Spring Initializr 線上建立,再本地匯入。這裡我們選用第二種方式。 自行新增自己需要的模組

SpringBoot 2.X整合Redis(Lettuce)

請先安裝叢集或者單臺。 參考:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-redis; https://blog.csdn.net/qq_24076

springboot學習筆記之SpringMVC自動配置原理

Springboot中自動配置Springmvc的檔案 @Configuration @ConditionalOnWebApplication(type = Type.SERVLET) @ConditionalOnClass({ Servlet.class, D

Springboot 2.x 外部資原始檔配置

springboot1.5的寫法過時,2.x版本寫法如下 @Configuration //@EnableWebMvc public class MvcConfig implements WebMvc

springboot 2.X 整合redis 以及快取@Cacheable

【前言】針對系統中的查詢比較頻繁的熱點資料做快取,注意不是類似資料庫的二級快取哦,spring的Cacheable這個註解可以對方

SpringBoot 2.X整合Mybatis

1、建立工程環境 勾選Web、Mybatis、MySQL,如下 依賴如下 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g

SpringBoot 2.X課程學習 | 第三篇:自動配置(Auto-configuration)

一、auto-configuration introduction      自動配置是spri

SpringBoot自動配置原理

override activity eve rop 哪些 isf 代碼 文件 multi SpringBoot自動配置原理 備註:該SpringBoot自動配置原理不適合java剛入門學者以及不熟悉Spring4+Springmvc+maven的同學 1、當Sprin

SpringBoot自動配置原理過程解析

分享 類的方法 通過 fff 註解 autoconf resource name bsp SpringBoot的最大好處就是實現了大部分的自動配置,使得開發者可以更多的關註於業務開發,避免繁瑣的業務開發,但是SpringBoot如此好用的 自動註解過程著實讓人忍不住的去了解

SpringBoot-自動配置原理

factory ESS bean att cond active tor 條件判斷 common 可配置項參考: https://docs.spring.io/spring-boot/docs/2.0.1.BUILD-SNAPSHOT/reference/htmlsingl