匯豐xxx

1. Spring Boot 的了解,解決什么問題?

  • 我的理解:?Spring Boot 是一個基于 Spring 框架的快速開發腳手架,它簡化了 Spring 應用的初始搭建和開發過程。
  • 解決的問題:
    • 簡化配置:?傳統的 Spring 應用需要大量的 XML 配置,Spring Boot 通過約定大于配置的原則,提供了大量的默認配置,減少了手動配置的工作量。
    • 快速啟動:?Spring Boot 內嵌了常用的服務器(如 Tomcat、Jetty),可以直接運行,無需額外部署,大大縮短了開發周期。
    • 依賴管理:?Spring Boot 提供了 Starter POMs,將常用的依賴打包在一起,方便管理依賴,避免版本沖突。
    • 監控和管理:?Spring Boot Actuator 提供了對應用的監控和管理功能,如健康檢查、指標收集等。
    • 易于部署:?Spring Boot 可以打包成獨立的 JAR 包或 WAR 包,方便部署到各種環境。
  • 總結:?Spring Boot 提高了開發效率,降低了維護成本,使開發者可以更專注于業務邏輯的實現。

2. Spring Boot 的自動裝配,為什么可以實現自動配置?

  • 核心機制:?Spring Boot 的自動裝配基于 Spring 的條件化配置和?EnableAutoConfiguration?注解。
  • 實現原理:
    • EnableAutoConfiguration?注解:?這是一個復合注解,包含了?@Configuration@EnableImport?和?@ComponentScan?等注解。
      • @Configuration:表明這是一個配置類。
      • @EnableImport:導入?AutoConfigurationImportSelector?類,該類負責掃描和加載自動配置類。
      • @ComponentScan:掃描當前應用中的組件。
    • AutoConfigurationImportSelector?類:?該類實現了?DeferredImportSelector?接口,負責延遲加載自動配置類。
      • selectImports()?方法:?該方法會掃描?META-INF/spring.factories?文件,該文件中定義了大量的自動配置類。
      • 條件化配置:?Spring Boot 使用?@ConditionalOnClass@ConditionalOnBean?等條件化注解,根據當前環境中的類、Bean 等條件,決定是否加載某個自動配置類。
  • 總結:?EnableAutoConfiguration?注解觸發自動配置的掃描和加載,條件化注解決定是否應用某個自動配置,最終實現自動配置。

3. Spring Boot 怎么做到自動配置,加了?EnableAutoConfiguration?怎樣掃描的?

  • 詳細流程:
    1. @SpringBootApplication?注解:?通常在 Spring Boot 應用的啟動類上使用,它包含了?@EnableAutoConfiguration?注解。
    2. EnableAutoConfiguration?注解:?觸發?AutoConfigurationImportSelector?類的執行。
    3. AutoConfigurationImportSelector?類:
      • selectImports()?方法:?從?META-INF/spring.factories?文件中讀取自動配置類的全限定名。
      • SpringFactoriesLoader.loadFactoryNames()?方法:?負責加載?spring.factories?文件中的配置。
      • 條件判斷:?根據?@ConditionalOnClass@ConditionalOnBean?等條件化注解,判斷是否需要加載某個自動配置類。
      • 實例化 Bean:?如果滿足條件,則將自動配置類實例化成 Bean,并添加到 Spring 容器中。
  • 總結:?EnableAutoConfiguration?注解通過?AutoConfigurationImportSelector?類掃描?spring.factories?文件,并根據條件化注解加載自動配置類,最終實現自動配置。

4. 如果我想對 Spring Boot 有一些默認的配置,如何修改這些配置?

  • 方法一:使用?application.properties?或?application.yml?文件:
    • 這是最常用的方法,可以在?src/main/resources?目錄下創建?application.properties?或?application.yml?文件,覆蓋 Spring Boot 的默認配置。
    • 示例:
      • application.properties
        server.port=8081
        spring.datasource.url=jdbc:mysql://localhost:3306/mydb
        
      • application.yml
        server:port: 8081
        spring:datasource:url: jdbc:mysql://localhost:3306/mydb
        
  • 方法二:使用命令行參數:
    • 可以在啟動應用時,通過命令行參數覆蓋默認配置。
    • 示例:
      java -jar myapp.jar --server.port=8082 --spring.datasource.url=jdbc:mysql://localhost:3306/mydb
      
  • 方法三:使用環境變量:
    • 可以通過設置環境變量覆蓋默認配置。
    • 示例:
      export SERVER_PORT=8083
      export SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/mydb
      java -jar myapp.jar
      
  • 方法四:編寫自定義配置類:
    • 可以編寫自定義的配置類,使用?@Configuration?注解,并使用?@PropertySource?注解加載自定義的配置文件。
    • 示例:
      @Configuration
      @PropertySource("classpath:myconfig.properties")
      public class MyConfig {@Value("${my.property}")private String myProperty;
      }
      
  • 總結:?可以通過?application.properties?或?application.yml?文件、命令行參數、環境變量或自定義配置類來修改 Spring Boot 的默認配置。

5. 那如果不想要默認的數據庫,應該如何處理呢?

  • 方法一:排除默認的數據源自動配置:
    • 在啟動類上使用?@SpringBootApplication?注解的?exclude?屬性,排除默認的數據源自動配置類。
    • 示例:
      @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
      public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
      }
      
  • 方法二:不提供數據源相關的依賴:
    • 如果項目中沒有引入任何數據源相關的依賴(如?spring-boot-starter-jdbcspring-boot-starter-data-jpa),Spring Boot 就不會自動配置數據源。
  • 方法三:使用條件化配置:
    • 可以使用?@ConditionalOnClass?或?@ConditionalOnBean?等條件化注解,根據當前環境中的類或 Bean 來決定是否配置數據源。
    • 示例:
      @Configuration
      @ConditionalOnMissingBean(DataSource.class)
      public class NoDataSourceConfig {// 不配置數據源
      }
      
  • 方法四:自定義數據源配置:
    • 如果需要使用自定義的數據源,可以編寫自定義的配置類,并使用?@Configuration?和?@Bean?注解來配置數據源。
    • 示例:
      @Configuration
      public class MyDataSourceConfig {@Beanpublic DataSource myDataSource() {// 配置自定義的數據源DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");dataSource.setUsername("root");dataSource.setPassword("password");return dataSource;}
      }
      
  • 總結:?可以通過排除默認的數據源自動配置、不提供數據源相關的依賴、使用條件化配置或自定義數據源配置來處理不想要默認數據庫的情況。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900620.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900620.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900620.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于 Spring Boot 瑞吉外賣系統開發(一)

基于 Spring Boot 瑞吉外賣系統開發(一) 系統概述 系統功能 技術選型 初始項目和數據準備 初始項目和SQL文件下載 創建數據庫并導入數據 打開reggie項目 運行效果 主函數啟動項目,訪問URL: http://127.0.0.1:8080/backend/pag…

大型語言模型智能應用Coze、Dify、FastGPT、MaxKB 對比,選擇合適自己的LLM工具

大型語言模型智能應用Coze、Dify、FastGPT、MaxKB 對比,選擇合適自己的LLM工具 Coze、Dify、FastGPT 和 MaxKB 都是旨在幫助用戶構建基于大型語言模型 (LLM) 的智能應用的平臺。它們各自擁有獨特的功能和側重點,以下是對它們的簡要對比: Coz…

【項目管理】第6章 信息管理概論 --知識點整理

項目管理 相關文檔,希望互相學習,共同進步 風123456789~-CSDN博客 (一)知識總覽 項目管理知識域 知識點: (項目管理概論、立項管理、十大知識域、配置與變更管理、績效域) 對應&…

Zapier MCP:重塑跨應用自動化協作的技術實踐

引言:數字化協作的痛點與突破 在當今多工具協同的工作環境中,開發者與辦公人員常常面臨數據孤島、重復操作等效率瓶頸。Zapier推出的MCP(Model Context Protocol)協議通過標準化數據交互框架,為跨應用自動化提供了新的…

echart實現動態折線圖(vue3+ts)

最近接到個任務,需要用vue3實現動態折線圖。之前沒有用過,所以一路坎坷,現在記錄一下,以后也好回憶一下。 之前不清楚echart的繪制方式,以為是在第一秒的基礎上繪制第二秒,后面實驗過后,發現并…

Java學習——day24(反射進階:注解與動態代理)

文章目錄 1. 反射與注解2. 動態代理3. 實踐:編寫動態代理示例4. 注解定義與使用5. 動態代理6. 小結與思考 1. 反射與注解 注解:注解是 Java 提供的用于在代碼中添加元數據的機制。它不會影響程序的執行,但可以在運行時通過反射獲取和處理。反…

C++之nullptr

文章目錄 前言 一、NULL 1、代碼 2、結果 二、nullptr 1、代碼 2、結果 總結 前言 當我們談論空指針時,很難避免談及nullptr。nullptr是C++11引入的一個關鍵字,用來表示空指針。在C++中,空指針一直是一個容易引起混淆的問題,因為在早期版本的C++中,通常使用NULL來…

JavaScript惰性加載優化實例

這是之前的一位朋友的酒桌之談,他之前負責的一個電商項目,剛剛開發萬,首頁加載時間特別長,體驗很差,所以就開始排查,發現是在首頁一次性加載所有js導致的問題,這個問題在自己學習的時候并不明顯…

蘋果內購支付 Java 接口

支付流程&#xff0c;APP支付成功后 前端調用后端接口&#xff0c;后端接口將前端支付成功后拿到的憑據傳給蘋果服務器檢查&#xff0c;如果接口返回成功了&#xff0c;就視為支付。 代碼&#xff0c;productId就是蘋果開發者后臺提前設置好的 產品id public CommonResult<S…

數據庫中的數組: MySQL與StarRocks的數組操作解析

在現代數據處理中, 數組 (Array) 作為一種高效存儲和操作結構化數據的方式, 被廣泛應用于日志分析, 用戶行為統計, 標簽系統等場景. 然而, 不同數據庫對數組的支持差異顯著. 本文將以MySQL和StarRocks為例, 深入解析它們的數組操作能力, 并對比其適用場景. 文章目錄 一 為什么需…

LeetCode零錢兌換(動態規劃)

題目描述 給你一個整數數組 coins &#xff0c;表示不同面額的硬幣&#xff1b;以及一個整數 amount &#xff0c;表示總金額。 計算并返回可以湊成總金額所需的 最少的硬幣個數 。如果沒有任何一種硬幣組合能組成總金額&#xff0c;返回 -1 。 你可以認為每種硬幣的數量是無…

/sys/fs/cgroup/memory/memory.stat 關鍵指標說明

目錄 1. **total_rss**2. **total_inactive_file**3. **total_active_file**4. **shmem**5. **其他相關指標**總結 以下是/sys/fs/cgroup/memory/memory.stat文件中一些關鍵指標的詳細介紹&#xff0c;特別是與PostgreSQL相關的指標&#xff1a; 1. total_rss 定義&#xff1…

C++第14屆藍橋杯b組學習筆記

1. 日期統計 小藍現在有一個長度為 100100 的數組&#xff0c;數組中的每個元素的值都在 00 到 99 的范圍之內。數組中的元素從左至右如下所示&#xff1a; 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4…

[Effective C++]條款28:避免返回handles指向對象內部成分

. 在C中&#xff0c;返回指向對象內部成分的引用&#xff08;handles&#xff09;可能會導致封裝性降低和對象空懸問題。為了避免這些問題&#xff0c;可以通過返回const引用來限制對內部數據的修改&#xff0c;從而確保只讀訪問 1、返回內部引用對象 下面代碼中getData函數返…

PyTorch 學習筆記

環境&#xff1a;python3.8 PyTorch2.4.1cpu PyCharm 參考鏈接&#xff1a; 快速入門 — PyTorch 教程 2.6.0cu124 文檔 PyTorch 文檔 — PyTorch 2.4 文檔 快速入門 導入庫 import torch from torch import nn from torch.utils.data import DataLoader from torchvision …

windows開啟wsl與輕量級虛擬機管理

基于win 10 打造K8S應用開發環境&#xff08;wsl & kind&#xff09; 一、wsl子系統安裝 1.1 確認windows系統版本 cmd/powershell 或者win r 運行winver 操作系統要> 19044 1.2 開啟wsl功能 控制面板 -> 程序 -> 啟用或關閉Windows功能 開啟適用于Linux的…

C++ -異常之除以 0 問題(整數除以 0 編譯時檢測、整數除以 0 運行時檢測、浮點數除以 0 編譯時檢測、浮點數除以 0 運行時檢測)

一、整數除以 0&#xff08;編譯時檢測&#xff09; 1、演示 #include <iostream>using namespace std;int main() {int result 10 / 0;cout << result << endl;return 0; }程序無法運行&#xff0c;輸出結果 error C2124: 被零除或對零求模2、演示解讀 …

【藍橋杯】搜索算法:剪枝技巧+記憶化搜索

1. 可行性剪枝應用 1.1. 題目 題目描述: 給定一個正整數n和一個正整數目標值target,以及一個由不同正整數組成的數組nums。要求從nums中選出若干個數,每個數可以被選多次,使得這些數的和恰好等于target。問有多少種不同的組合方式? 輸入: 第一行:n和target,表示數組…

Uniapp 集成極光推送(JPush)完整指南

文章目錄 前言一、準備工作1. 注冊極光開發者賬號2. 創建應用3. Uniapp項目準備 二、集成極光推送插件方法一&#xff1a;使用UniPush&#xff08;推薦&#xff09;方法二&#xff1a;手動集成極光推送SDK 三、配置原生平臺參數四、核心功能實現1. 獲取RegistrationID2. 設置別…

Linux中進程

一、認識進程 進程(PCB)內核數據結構(task_struct)程序的代碼和數據 每一個進程都有其獨立的task_struct,OS對眾多的task_struct進行管理&#xff0c;如何管理&#xff1f;先描述再組織&#xff0c;所有運?在系統?的進程都以task_struct鏈表的形式存在內核?&#xff0c;而…