欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot?整合數(shù)據(jù)源的具體實(shí)踐

 更新時(shí)間:2023年11月22日 11:11:55   作者:zhizhiqiuya  
本文主要介紹了SpringBoot?整合數(shù)據(jù)源的具體實(shí)踐,利用?Spring?Boot?的自動(dòng)配置和簡(jiǎn)化的注解來(lái)簡(jiǎn)化數(shù)據(jù)源配置工作,從而更專(zhuān)注于應(yīng)用程序的業(yè)務(wù)邏輯開(kāi)發(fā),感興趣的可以了解一下

前言

Spring Boot 是當(dāng)今最流行的 Java 開(kāi)發(fā)框架之一,它以簡(jiǎn)潔、高效的特點(diǎn)幫助開(kāi)發(fā)者快速構(gòu)建穩(wěn)健的應(yīng)用程序。在實(shí)際項(xiàng)目中,涉及到數(shù)據(jù)庫(kù)操作的需求時(shí),我們需要對(duì)數(shù)據(jù)源進(jìn)行整合。本文將重點(diǎn)介紹如何在 Spring Boot 中整合數(shù)據(jù)源,以及如何利用 Spring Boot 的便利特性來(lái)簡(jiǎn)化這一過(guò)程。

無(wú)論是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),還是當(dāng)下流行的 NoSQL 數(shù)據(jù)庫(kù),Spring Boot 都提供了豐富的支持。通過(guò)本文的學(xué)習(xí),讀者將能夠掌握在 Spring Boot 中整合各類(lèi)數(shù)據(jù)源的方法,并且了解如何利用 Spring Boot 的自動(dòng)配置和簡(jiǎn)化的注解來(lái)簡(jiǎn)化數(shù)據(jù)源配置工作,從而更專(zhuān)注于應(yīng)用程序的業(yè)務(wù)邏輯開(kāi)發(fā)。

如果你對(duì) Spring Boot 中數(shù)據(jù)源整合的方法感到困惑,或者希望了解如何通過(guò) Spring Boot 來(lái)更高效地處理數(shù)據(jù)庫(kù)操作,那么本文將為你提供寶貴的指導(dǎo)和實(shí)用的技巧。讓我們一起深入探索 Spring Boot 中數(shù)據(jù)源整合的精彩世界吧!

一、前期準(zhǔn)備

1、新建項(xiàng)目,結(jié)構(gòu)如下

2、導(dǎo)入依賴(lài)

<dependencies>
        <!-- spring boot 的核心starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

         <!-- Druid 連接池的 starter -->
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.18</version>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <builder>paketobuildpacks/builder-jammy-base:latest</builder>
                    </image>
                </configuration>
            </plugin>
        </plugins>
    </build>

這是一個(gè)關(guān)于 Spring Boot 整合數(shù)據(jù)源的 Maven 依賴(lài)配置和構(gòu)建插件示例。這些依賴(lài)項(xiàng)將幫助你在項(xiàng)目中使用 Spring Boot 和相關(guān)的數(shù)據(jù)庫(kù)連接池進(jìn)行數(shù)據(jù)源整合。以下是示例中包含的依賴(lài)項(xiàng)和插件說(shuō)明:

  • spring-boot-starter:Spring Boot 的核心依賴(lài),提供了基本的 Spring Boot 功能。
  • spring-boot-starter-jdbc:Spring Boot 的 JDBC Starter,用于支持 JDBC 數(shù)據(jù)庫(kù)操作。
  • lombok:Java 開(kāi)發(fā)工具,簡(jiǎn)化了代碼編寫(xiě)過(guò)程。
  • druid-spring-boot-starter:Druid 連接池的 Spring Boot Starter,用于管理數(shù)據(jù)庫(kù)連接。
  • mysql-connector-j:MySQL 數(shù)據(jù)庫(kù)的 JDBC 驅(qū)動(dòng)。
  • spring-boot-starter-test:Spring Boot 的測(cè)試 Starter,用于編寫(xiě)單元測(cè)試。

在構(gòu)建部分,示例使用了 spring-boot-maven-plugin 插件來(lái)配置 Docker 鏡像構(gòu)建時(shí)所使用的鏡像構(gòu)建器。

二、使用 yml  配置SpringBoot 內(nèi)置的 hikari 連接池

# 數(shù)據(jù)源連接池
spring:
  datasource:
    # 連接屬性
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/psm
    username: root
    password: 123456
    # SpringBoot 內(nèi)置的 hikari 連接池
    hikari:
      # 最小空閑連接
      minimum-idle: 5
      # 最大連接數(shù)
      maximum-pool-size: 20
      # 最大空閑時(shí)長(zhǎng)
      idle-timeout: 900000
      # 連接的超時(shí)時(shí)間
      connection-timeout: 3000
      # 檢查連接的有效性
      connection-test-query: select 1
  • driver-class-name:指定 JDBC 驅(qū)動(dòng)類(lèi)的完整類(lèi)名,用于連接數(shù)據(jù)庫(kù)。在示例中,我們使用了 MySQL 的驅(qū)動(dòng)類(lèi) com.mysql.cj.jdbc.Driver。
  • url:指定數(shù)據(jù)庫(kù)的連接 URL。在示例中,我們連接的是本地的 MySQL 數(shù)據(jù)庫(kù),監(jiān)聽(tīng)端口為 3306,數(shù)據(jù)庫(kù)名稱(chēng)為 psm。
  • username 和 password:指定連接數(shù)據(jù)庫(kù)所需的用戶(hù)名和密碼。

接下來(lái),我們配置了 Spring Boot 內(nèi)置的 HikariCP 連接池相關(guān)的屬性:

  • minimum-idle:指定連接池中最小空閑連接數(shù)。在示例中,我們?cè)O(shè)置為 5,表示連接池中至少保持 5 個(gè)空閑連接。
  • maximum-pool-size:指定連接池中的最大連接數(shù)。在示例中,我們?cè)O(shè)置為 20,表示連接池中最多可以擁有 20 個(gè)連接。
  • idle-timeout:指定連接的最大空閑時(shí)長(zhǎng),超過(guò)該時(shí)長(zhǎng)的空閑連接將被釋放。在示例中,我們?cè)O(shè)置為 900000 毫秒(15 分鐘)。
  • connection-timeout:指定連接的超時(shí)時(shí)間,即獲取連接的最大等待時(shí)間。
  • connection-test-query:這里可以指定一個(gè)用于測(cè)試連接是否有效的SQL查詢(xún)語(yǔ)句,比如select 1。連接池會(huì)定期執(zhí)行這個(gè)查詢(xún)來(lái)檢測(cè)連接的有效性。 

1、測(cè)試一下

@Slf4j
@SpringBootTest
class Ch04ApplicationTests {

    @Autowired
    private DataSource dataSource;


    @Test
    void contextLoads() throws SQLException {

        Connection connection = dataSource.getConnection();
        log.info("連接對(duì)象:" + connection);

    }
}

 這是一個(gè)簡(jiǎn)單的Junit測(cè)試類(lèi),用來(lái)驗(yàn)證你在Spring Boot應(yīng)用中配置數(shù)據(jù)源連接池是否成功。以下是這個(gè)測(cè)試類(lèi)的詳細(xì)說(shuō)明:

  • @Slf4j注解:這個(gè)注解會(huì)自動(dòng)生成一個(gè)名為log的日志對(duì)象,用來(lái)輸出日志信息。

  • @SpringBootTest注解:這個(gè)注解告訴JUnit測(cè)試框架,需要加載整個(gè)Spring應(yīng)用上下文來(lái)執(zhí)行測(cè)試。

  • @Autowired注解:這個(gè)注解用來(lái)自動(dòng)裝配數(shù)據(jù)源連接池對(duì)象,也就是在Spring容器中查找一個(gè)數(shù)據(jù)源對(duì)象并將其注入到dataSource變量中。

  • contextLoads()方法:這個(gè)方法是一個(gè)測(cè)試用例,用來(lái)測(cè)試數(shù)據(jù)源連接池是否正常工作。在這個(gè)方法中,你調(diào)用了dataSource.getConnection()方法獲取一個(gè)數(shù)據(jù)庫(kù)連接,并使用log.info()方法輸出這個(gè)連接對(duì)象。

當(dāng)你運(yùn)行這個(gè)測(cè)試類(lèi)時(shí),如果能夠正常輸出連接對(duì)象,就說(shuō)明你已經(jīng)成功地配置了數(shù)據(jù)源連接池,并且能夠使用它來(lái)管理數(shù)據(jù)庫(kù)連接了。

運(yùn)行結(jié)果:

三、使用 yml 配置 druid 連接池

# 數(shù)據(jù)源連接池
spring:
  datasource:
    # 連接屬性
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/psm
    username: root
    password: 123456

    # 使用 druid 連接池
    druid:
      # 最大連接數(shù)
      max-active: 100
      # 初始化連接數(shù)
      initial-size: 10
      # 最小連接池?cái)?shù)
      min-idle: 10
      # 最大等待時(shí)間
      max-wait: 1000
      # 如果連接空閑時(shí)間大于等于( min-evictable-idle-time-millis)
      # 的時(shí)長(zhǎng)則關(guān)閉連接
      time-between-eviction-runs-millis: 60000
      # 連接保持空閑而不被驅(qū)逐出連接池
      min-evictable-idle-time-millis: 300000
      # 檢查連接有效性
      validation-query: select 1
      # 是否緩存 preparedStatement (MySQL 建議關(guān)閉)
      pool-prepared-statements: false

以下是一些重要的設(shè)置說(shuō)明:

  • driver-class-name、urlusernamepassword:這些屬性指定了數(shù)據(jù)庫(kù)連接的基本信息,包括驅(qū)動(dòng)類(lèi)名、數(shù)據(jù)庫(kù)URL、用戶(hù)名和密碼。

  • druid.max-active:這個(gè)屬性指定了連接池中允許的最大活動(dòng)連接數(shù),即最大連接池大小。

  • druid.initial-size:這個(gè)屬性指定了連接池的初始大小,即在連接池剛剛創(chuàng)建時(shí),連接池中包含的連接數(shù)。

  • druid.min-idle:這個(gè)屬性指定了連接池中保持的最小空閑連接數(shù)。

  • druid.max-wait:當(dāng)連接池中沒(méi)有可用連接時(shí),客戶(hù)端在等待連接時(shí)最長(zhǎng)的時(shí)間,單位為毫秒。

  • druid.time-between-eviction-runs-millis:用于檢測(cè)連接池中空閑連接的時(shí)間間隔,單位為毫秒。如果連接空閑時(shí)間大于等于min-evictable-idle-time-millis的時(shí)長(zhǎng),則關(guān)閉連接。

  • druid.min-evictable-idle-time-millis:連接保持空閑而不被驅(qū)逐出連接池的時(shí)長(zhǎng),單位為毫秒。

  • druid.validation-query:用來(lái)檢測(cè)連接是否有效的SQL查詢(xún)語(yǔ)句,例如select 1

  • druid.pool-prepared-statements:是否緩存prepared statements,對(duì)于MySQL數(shù)據(jù)庫(kù),建議將此屬性設(shè)置為false。

 1、測(cè)試一下

@Slf4j
@SpringBootTest
class Ch04ApplicationTests {

    @Autowired
    private DataSource dataSource;

    /**
     * 注入 JDBC 的 Template,用于操作數(shù)據(jù)
     */
    @Autowired
    private JdbcTemplate template;

    @Test
    void contextLoads() throws SQLException {

        Connection connection = dataSource.getConnection();
        log.info("連接對(duì)象:" + connection);

    }

    @Test
    public void testJdbcTemplate(){
        List<Map<String, Object>> list = template.queryForList("select * from psm.city_info limit 0,10");
        list.forEach(map -> map.forEach((k,v) -> {
            log.info("鍵:" + k +"  " + "值:" + v);
        }) );
    }

}

這段代碼是一個(gè)Spring Boot的測(cè)試類(lèi),用于測(cè)試數(shù)據(jù)源和JdbcTemplate是否能夠正常工作。

首先,在@Autowired注解下,DataSource對(duì)象被注入到測(cè)試類(lèi)中。這個(gè)數(shù)據(jù)源對(duì)象可以用來(lái)獲取數(shù)據(jù)庫(kù)連接,在contextLoads方法中,通過(guò)調(diào)用dataSource.getConnection()方法獲得了一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象,然后在日志中記錄了這個(gè)連接對(duì)象。

另外,在testJdbcTemplate方法中,可以看到JdbcTemplate對(duì)象也被注入到測(cè)試類(lèi)中。JdbcTemplate是Spring框架提供的一個(gè)用于簡(jiǎn)化JDBC操作的工具類(lèi),可以用它來(lái)執(zhí)行SQL查詢(xún)、更新等操作。在這個(gè)方法中,使用了template.queryForList方法查詢(xún)了psm.city_info表的前10行數(shù)據(jù),并打印出了每一行數(shù)據(jù)中的鍵值對(duì)。

通過(guò)這些測(cè)試,可以驗(yàn)證數(shù)據(jù)源和JdbcTemplate是否已經(jīng)正確配置和注入到Spring容器中,以及它們是否能夠正常地連接和操作數(shù)據(jù)庫(kù)。如果測(cè)試通過(guò),則說(shuō)明你已經(jīng)成功地配置了數(shù)據(jù)源和JdbcTemplate,并能夠使用它們來(lái)操作數(shù)據(jù)庫(kù)。

運(yùn)行結(jié)果:

四、hikari 和Druid的區(qū)別

Hikari和Druid都是Java語(yǔ)言中常用的數(shù)據(jù)庫(kù)連接池。它們之間的不同主要體現(xiàn)在以下幾個(gè)方面:

  • 性能和效率: HikariCP通常被認(rèn)為是性能最好的連接池之一,因?yàn)樗鼘?zhuān)注于快速、輕量級(jí)和高效的連接管理。相比之下,Druid雖然功能強(qiáng)大,但在某些情況下可能會(huì)犧牲一些性能以換取更多的特性和功能。

  • 配置和簡(jiǎn)潔性: HikariCP的配置相對(duì)簡(jiǎn)單,通常只需要很少的參數(shù)設(shè)置就可以工作良好。而Druid提供了更多的配置選項(xiàng)和功能,這使得它在一些復(fù)雜的場(chǎng)景下更具靈活性,但也增加了學(xué)習(xí)和配置的復(fù)雜性。

  • 監(jiān)控和擴(kuò)展性: Druid內(nèi)置了豐富的監(jiān)控和統(tǒng)計(jì)功能,可以方便地查看連接池的狀態(tài)和性能指標(biāo)。此外,Druid還提供了諸如防火墻、SQL轉(zhuǎn)義等額外的功能,這些功能在HikariCP中可能需要額外的集成或擴(kuò)展。

綜上所述,HikariCP適合那些追求高性能、簡(jiǎn)潔配置的場(chǎng)景,而Druid則適合那些對(duì)監(jiān)控和擴(kuò)展性有較高要求的場(chǎng)景。選擇哪個(gè)連接池取決于具體的項(xiàng)目需求和性能考量。

到此這篇關(guān)于SpringBoot 整合數(shù)據(jù)源的具體實(shí)踐的文章就介紹到這了,更多相關(guān)SpringBoot 整合數(shù)據(jù)源內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解springboot使用異步注解@Async獲取執(zhí)行結(jié)果的坑

    詳解springboot使用異步注解@Async獲取執(zhí)行結(jié)果的坑

    本文主要介紹了springboot使用異步注解@Async獲取執(zhí)行結(jié)果的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Kotlin 基礎(chǔ)教程之反射

    Kotlin 基礎(chǔ)教程之反射

    這篇文章主要介紹了Kotlin 基礎(chǔ)教程之反射的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • MybatisPlus整合Flowable出現(xiàn)的坑及解決

    MybatisPlus整合Flowable出現(xiàn)的坑及解決

    這篇文章主要介紹了MybatisPlus整合Flowable出現(xiàn)的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • SpringBoot2 參數(shù)管理實(shí)踐之入?yún)⒊鰠⑴c校驗(yàn)的方式

    SpringBoot2 參數(shù)管理實(shí)踐之入?yún)⒊鰠⑴c校驗(yàn)的方式

    這篇文章主要介紹了SpringBoot2 參數(shù)管理實(shí)踐,入?yún)⒊鰠⑴c校驗(yàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-06-06
  • Java Swing JCheckBox復(fù)選框的實(shí)現(xiàn)方法

    Java Swing JCheckBox復(fù)選框的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java Swing JCheckBox復(fù)選框的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 詳解使用zxing庫(kù)生成QR-Code二維碼

    詳解使用zxing庫(kù)生成QR-Code二維碼

    這篇文章主要介紹了詳解使用zxing庫(kù)生成QR-Code二維碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Spring?Boot使用線(xiàn)程池處理上萬(wàn)條數(shù)據(jù)插入功能

    Spring?Boot使用線(xiàn)程池處理上萬(wàn)條數(shù)據(jù)插入功能

    這篇文章主要介紹了Spring?Boot使用線(xiàn)程池處理上萬(wàn)條數(shù)據(jù)插入功能,使用步驟是先創(chuàng)建一個(gè)線(xiàn)程池的配置,讓Spring Boot加載,用來(lái)定義如何創(chuàng)建一個(gè)ThreadPoolTaskExecutor,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-08-08
  • SpringBoot簡(jiǎn)單的SpringBoot后端實(shí)例

    SpringBoot簡(jiǎn)單的SpringBoot后端實(shí)例

    這篇文章主要介紹了SpringBoot簡(jiǎn)單的SpringBoot后端實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • idea編寫(xiě)java程序詳細(xì)圖文步驟

    idea編寫(xiě)java程序詳細(xì)圖文步驟

    這篇文章主要給大家介紹了關(guān)于idea編寫(xiě)java程序的詳細(xì)圖文步驟,IDEA是用于Java語(yǔ)言開(kāi)發(fā)的集成環(huán)境,它是業(yè)界公認(rèn)的目前用于Java程序開(kāi)發(fā)最好的工具,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • Java生成Markdown格式內(nèi)容完整代碼示例

    Java生成Markdown格式內(nèi)容完整代碼示例

    這篇文章主要介紹了將Java對(duì)象數(shù)據(jù)生成為Markdown文本,并提供了一個(gè)MarkdownUtil工具類(lèi)進(jìn)行處理,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03

最新評(píng)論