day01-2-依賴管理和自動配置

来源:https://www.cnblogs.com/liyuelian/archive/2023/03/12/17209453.html
-Advertisement-
Play Games

依賴管理和自動配置 1.依賴管理 1.1什麼是依賴管理 spring-boot-starter-parent 中還有父項目,聲明瞭開發中常用的依賴的版本號 並且進行自動版本仲裁,即如果程式員沒有指定某個依賴jar的版本,則以父版本指定的版本為準 1.2修改自動仲裁/預設版本號 比如我們要將Sprin ...


依賴管理和自動配置

1.依賴管理

1.1什麼是依賴管理

  1. spring-boot-starter-parent 中還有父項目,聲明瞭開發中常用的依賴的版本號

  2. 並且進行自動版本仲裁,即如果程式員沒有指定某個依賴jar的版本,則以父版本指定的版本為準

    image-20230312200211772

1.2修改自動仲裁/預設版本號

比如我們要將SpringBoot的 mysql 驅動版本改為 5.1.49(預設版本為8.0.26),有兩種方法:

(1)方式一:在pom.xml文件中顯式的導入mysql依賴,並指定version

<!--自己指定mysql的驅動版本-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.49</version>
</dependency>

(2)方式二:在pom.xml文件的< properties>節點中指定mysql的 key,形如:

<properties>
    <mysql.version>5.1.49</mysql.version>
</properties>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
image-20230312201218333

為什麼能夠達到修改版本仲裁的效果?

答:根據依賴就近優先原則。比如pom.xml文件不斷的應用依賴,形成了一個依賴樹,那麼項目依賴jar的版本以離本項目最近的版本為準。如果本項目沒有指定該jar的版本,就以離本項目最近的父項目的版本為準。

2.starter場景啟動器

2.1starter場景啟動器基本介紹

(1)開發中我們引入了相關場景的starter,這個場景中所有的相關依賴都引進來來,比如我們做web開發引入了spring-boot-starter-web,該starter將導入所有與web開發相關的所有包

image-20230312202512477

(2)依賴樹:可以看到spring-boot-starter-web幫我們引入了spring-webmvc,spring-web開發模塊,還引入了spring-boot-starter-tomcat場景,spring-boot-starter-json場景,這些場景下麵又引入了一大堆相關的包,這些依賴項可以快速啟動和運行一個項目,提高開發效率。

springboot-quickstart

(3)所有場景啟動器最基本的依賴就是spring-boot-starter,從前面的依賴樹可以看到這個依賴是SpringBoot自動配置的核心依賴

image-20230312203201794

2.2官方提供的starter

官方文檔:Developing with Spring Boot

介紹:

  1. 在開發中我們經常會用到spring-boot-starter-xxx,比如spring-boot-starter-web,該場景作用於web開發,也就是說xxx是某種開發場景
  2. 我們只要引入starter,這個場景的所有常規需要的依賴都能自動引入

2.3第三方starter

  1. SpringBoot也支持第三方starter
  2. 第三方starter不需要從spring-boot開始,因為這是官方spring-boot保留的命名方式。第三方啟動程式通常以項目名稱開頭。例如,名為thirdpartyproject的第三方啟動程式項目通常被命名為thirdpartyproject-spring-boot-starter
  3. 也就是說,xxx-spring-boot-starter是第三方為我們提供的簡化開發的場景啟動器

3.自動配置

3.1自動配置介紹

在SSM框架整合時,需要配置tomcat、配置SpringMVC、配置如何掃描包、配置字元過濾器、配置視圖解析器、文件上傳等,非常麻煩。而在SpringBoot中,存在自動配置機制,極大提高了開發效率。

3.2SpringBoot自動配置了哪些

  1. 自動配置了Tomcat

  2. 自動配置了SpringMVC

  3. 自動配置了Web的常用功能:比如字元過濾器,文件上傳,視圖解析器等等

    image-20230312205600873
  4. 自動配置:預設掃描包結構[官方文檔],它會去掃描主程式所在的包及其子包下的所有文件,當然如果要掃描其他包也可以進行配置。

    image-20230312210703781

3.3如何修改預設配置

3.3.1修改預設掃描包結構

直接在主程式的註解中指定要掃描的包及其子包:

@SpringBootApplication(scanBasePackages = {"com.li","xx.yy","aa.bb"})

註意,scanBasePackages屬性可以接收多個值。

3.3.2通過屬性文件修改配置

SpringBoot項目最重要也是最核心的配置文件就是application.properties,所有的框架配置都可以在這個配置文件中說明。application.properties文件一般放在resources目錄下。

application.properties配置大全

預設配置最終都是映射到某個類中,這個類最終也會被註入到spring的容器中。

配置properties-->配置屬性Bean-->Spring容器

例子:

#修改server的監聽埠 預設為8080
server.port=10000

#修改單個文件上傳的預設最大值 預設為1MB
#multipart.max-file-size屬性可以指定SpringBoot上傳文件的大小限制
#預設配置最終都是映射到某個類中!
#比如multipart.max-file-size會映射到MultipartProperties類上
#將游標放在該屬性,輸入ctrl+b,就可以定位這個屬性是關聯到哪個屬性類上的
spring.servlet.multipart.max-file-size=10MB
image-20230312215843707

3.3.3application.properties常用配置

#埠號
server.port=10000

#應用的上下文路徑(項目路徑)
server.servlet.context-path=/allModel

#指定 POJO 掃描包來讓 mybatis 自動掃描到自定義的 POJO
mybatis.type-aliases-package=com.cxs.allmodel.model

#指定 mapper.xml 的路徑:
#application 上配置了@MapperScan(掃描mapper類的路徑)和 pom.xml 中放行了 mapper.xml後,
#配置mapper-locations沒有意義。如果mapper類和 mapper.xml不在同一個路徑下時,mapper-locations就有用了
mybatis.mapper-locations=classpath:com/cxs/allmodel/mapper

#session 失效時間(單位 s)
spring.session.timeout=18000

#資料庫連接配置
#mysql 資料庫 url
mysql.one.jdbc-url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai&useSSL=false
#mysql 資料庫用戶名
mysql.one.username=
#資料庫密碼
mysql.one.password=
#線程池允許的最大連接數
mysql.one.maximum-pool-size=15

#日誌列印:
#日誌級別 trace<debug<info<warn<error<fatal 預設級別為 info,即預設列印 info 及其以上級別的日誌
#logging.level 設置日誌級別,後面跟生效的區域,比如 root 表示整個項目,也可以設置為某個包下,也可以具體到某個類名(日誌級別的值不區分大小寫)
logging.level.com.cxs.allmodel.=debug
logging.level.com.cxs.allmodel.mapper=debug
logging.level.org.springframework.web=info
logging.level.org.springframework.transaction=info
logging.level.org.apache.ibatis=info
logging.level.org.mybatis=info
logging.level.com.github.pagehelper = info
logging.level.root=info
#日誌輸出路徑
logging.file=/tmp/api/allmodel.log

#配置 pagehelper 分頁插件
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql

#jackson 時間格式化
spring.jackson.serialization.fail-on-empty-beans=false

#指定日期格式,比如 yyyy-MM-dd HH:mm:ss,或者具體的格式化類的全限定名
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

#指定日期格式化時區,比如 America/Los_Angeles 或者 GMT+10
spring.jackson.time-zone=GMT+8

#設置統一字元集
spring.http.encoding.charset=utf8

#redis 連接配置
# redis 所在主機 ip 地址
spring.redis.host=
#redis 伺服器密碼
spring.redis.password=
#redis 伺服器埠號
spring.redis.port=
#redis 資料庫的索引編號(0 到 15)
spring.redis.database=14
# 連接池的最大活動連接數量,使用負值無限制
spring.redis.pool.max-active=8
# 連接池的最大空閑連接數量,使用負值表示無限數量的空閑連接
spring.redis.pool.max-idle=8
# 連接池最大阻塞等待時間,使用負值表示沒有限制
spring.redis.pool.max-wait=-1ms
# 最小空閑連接數量,使用正值才有效果
spring.redis.pool.min-idle=0
# 是否啟用 SSL 連接.
spring.redis.ssl=false
# 連接超時,毫秒為單位
spring.redis.timeout= 18000ms
# 集群模式下,集群最大轉發的數量
spring.redis.cluster.max-redirects=
# 集群模式下,逗號分隔的鍵值對(主機:埠)形式的伺服器列表
spring.redis.cluster.nodes=
# 哨兵模式下,Redis 主伺服器地址
spring.redis.sentinel.master=
# 哨兵模式下,逗號分隔的鍵值對(主機:埠)形式的伺服器列表
spring.redis.sentinel.nodes= 127.0.0.1:5050,127.0.0.1:5060

3.3.4application.properties自定義配置

我們還可以在properties文件中自定義配置,通過@Value("${}")獲取對應屬性值

例子:

(1)application.properties 文件

my.website=https://www.baidu.com

(2)某個 Bean

@Value("${my.website}")
private String bdUrl;//從application.properties中獲取value值

3.4SpringBoot在哪裡讀取application.properties配置

(1)打開ConfigFileApplicationListener.java,看一下源碼

image-20230312222302971
private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/*/,file:./config/";

可以看到SpringBoot預設讀取的路徑有:

  1. 類路徑:classpath:/
  2. 類路徑的config目錄下:classpath:/config/
  3. 項目根目錄下:file:./
  4. 根目錄的config目錄的任何子級目錄下:file:./config/*/
  5. 根目錄的config目錄下:file:./config/

也就是說如果我們把 application.properties 放在上述任意的目錄下, 你會發現依然是管用的。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 適配器模式(Adapter Pattern):將一個類的介面轉化為客戶端所期望的介面,使得原本不相容的類可以一起工作。在前端開發中,可以使用適配器模式來處理不同瀏覽器之間的相容性問題。 適配器模式通常包含三個角色:客戶端、目標對象和適配器對象。客戶端調用適配器對象的介面,適配器對象再調用目標對象的接 ...
  • 「和我一起學 XXX」是我 2023 年的一個新企劃,目的是向讀者(也包括未來的自己)介紹我正在學習的某項新技術。文章會通過長期反覆迭代的方式保持其內容的新鮮度。文章有較大內容更新時,會在文章開頭進行更新時間說明(由於時間精力有限,更新的內容只能保障少數幾個平臺的同步,請見諒)。 1. 什麼是 Th ...
  • web
    1. 表格標簽 1.1 表格的主要作用 表格主要是用於顯示、展示數據,因為它可以讓數據顯示的非常的規整,可讀性非常好。特別是後臺展示數據的時候,能夠熟練運用表格就顯得很重要。一個清爽簡約的表格能夠把繁雜的數據表現得很有條理。 總結:表格不是用來佈局頁面的,而是用來展示數據的。 1.2 表格的基本語法 ...
  • 網頁 1. 什麼是網頁 網站是指在網際網路上根據一定的規則,使用HTML等製作的用於展示特定內容相關的網頁集合。 網頁是網站中的一“頁”,通常是HTML格式的文件,它要通過瀏覽器來閱讀。 網頁是構成網站的基本元素,它通常由圖片、鏈接、文字、聲音、視頻等元素組成。通常我們看到的網頁,常見以.htm或.h ...
  • 相關解釋 ​ 在打開瀏覽器的時候會創建出來若幹進程,以便於完成相關任務,其實最重要的是渲染進程。 ​ 渲染進程的主要工作為:解析HTML,繪製CSS樣式,執行JS代碼等。 ​ 其中在執行JS代碼的時候,會根據代碼任務的類型創建出來若幹隊列,其中常見的有: 延時隊列(setInterval,setTi ...
  • 1. GC觸發條件 1.1. 當新生代滿的時候 1.1.1. Minor GC會被觸發 1.2. 當老年代滿的時候 1.2.1. Full GC會被觸發 1.3. 當堆快要填滿時 1.3.1. 併發GC(如果適用)會被觸發 2. 強制開啟GC 2.1. System.gc()方法 2.1.1. 總是 ...
  • MybatisPlus 快速上手 ORM介紹 ORM(Object Relational Mapping,對象關係映射)是為瞭解決面向對象與關係型資料庫存在的互不匹配的一種技術。持久化(Persistence),即把數據(如記憶體中的對象)保存到可永久保存的 存儲設備 中(如磁碟)。 ORM通過使用描 ...
  • 說明 使用 QCustomPlot 繪圖庫輔助開發時整理的學習筆記。本篇總結 QCustomPlot 在各版本中的更新要點,詳細更新日誌可查看 QCustomPlot 更新日誌 以及各版本的 changelog 文件(部分版本沒有可以線上查看的 changelog 記錄,需要到 下載界面 下載對應的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...