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

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

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

前言

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

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

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

一、前期準(zhǔn)備

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

2、導(dǎo)入依賴

<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 依賴配置和構(gòu)建插件示例。這些依賴項(xiàng)將幫助你在項(xiàng)目中使用 Spring Boot 和相關(guān)的數(shù)據(jù)庫連接池進(jìn)行數(shù)據(jù)源整合。以下是示例中包含的依賴項(xiàng)和插件說明:

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

在構(gòu)建部分,示例使用了 spring-boot-maven-plugin 插件來配置 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í)長
      idle-timeout: 900000
      # 連接的超時(shí)時(shí)間
      connection-timeout: 3000
      # 檢查連接的有效性
      connection-test-query: select 1
  • driver-class-name:指定 JDBC 驅(qū)動(dòng)類的完整類名,用于連接數(shù)據(jù)庫。在示例中,我們使用了 MySQL 的驅(qū)動(dòng)類 com.mysql.cj.jdbc.Driver。
  • url:指定數(shù)據(jù)庫的連接 URL。在示例中,我們連接的是本地的 MySQL 數(shù)據(jù)庫,監(jiān)聽端口為 3306,數(shù)據(jù)庫名稱為 psm。
  • username 和 password:指定連接數(shù)據(jù)庫所需的用戶名和密碼。

接下來,我們配置了 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í)長,超過該時(shí)長的空閑連接將被釋放。在示例中,我們?cè)O(shè)置為 900000 毫秒(15 分鐘)。
  • connection-timeout:指定連接的超時(shí)時(shí)間,即獲取連接的最大等待時(shí)間。
  • connection-test-query:這里可以指定一個(gè)用于測試連接是否有效的SQL查詢語句,比如select 1。連接池會(huì)定期執(zhí)行這個(gè)查詢來檢測連接的有效性。 

1、測試一下

@Slf4j
@SpringBootTest
class Ch04ApplicationTests {

    @Autowired
    private DataSource dataSource;


    @Test
    void contextLoads() throws SQLException {

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

    }
}

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

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

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

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

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

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

運(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í)長則關(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è)置說明:

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

  • 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)連接池中沒有可用連接時(shí),客戶端在等待連接時(shí)最長的時(shí)間,單位為毫秒。

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

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

  • druid.validation-query:用來檢測連接是否有效的SQL查詢語句,例如select 1。

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

 1、測試一下

@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的測試類,用于測試數(shù)據(jù)源和JdbcTemplate是否能夠正常工作。

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

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

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

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

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

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

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

  • 配置和簡潔性: HikariCP的配置相對(duì)簡單,通常只需要很少的參數(shù)設(shè)置就可以工作良好。而Druid提供了更多的配置選項(xiàng)和功能,這使得它在一些復(fù)雜的場景下更具靈活性,但也增加了學(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適合那些追求高性能、簡潔配置的場景,而Druid則適合那些對(duì)監(jiān)控和擴(kuò)展性有較高要求的場景。選擇哪個(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é)果的坑,文中通過示例代碼介紹的非常詳細(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)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 詳解使用zxing庫生成QR-Code二維碼

    詳解使用zxing庫生成QR-Code二維碼

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

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

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

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

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

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

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

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

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

最新評(píng)論