Spring Boot 開發三板斧:POM 依賴、注解與配置管理

引言

Spring Boot 是一個功能強大且廣受歡迎的框架,用于快速構建基于 Spring 的應用。它通過簡化配置和自動化管理,幫助開發者專注于業務邏輯的實現。然而,要想高效地開發 Spring Boot 應用,掌握以下三個關鍵點至關重要:POM 依賴管理、注解使用和配置管理。本文將詳細介紹這三個方面,并通過代碼示例幫助讀者更好地理解和應用。


一、POM 依賴管理

1. 什么是 POM 文件?

POM(Project Object Model)是 Maven 項目的核心配置文件,用于管理項目的依賴、構建配置和插件等。在 Spring Boot 項目中,POM 文件是配置和管理依賴的核心工具。

2. POM 文件的結構

一個典型的 Spring Boot 項目 POM 文件包含以下幾個關鍵部分:

  • Parent POM: 定義項目的父 POM,通常使用 Spring Boot Starter Parent,以確保依賴版本的一致性。
  • Dependencies: 列出項目所需的依賴庫。
  • Build: 配置構建插件,如 Maven Compiler Plugin 和 Spring Boot Maven Plugin。
  • Repositories: 定義 Maven 倉庫,如 Spring 的官方倉庫。
    示例:POM 文件配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>spring-boot-demo</artifactId><version>1.0.0</version><packaging>jar</packaging><!-- 定義父 POM --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.5</version><relativePath/> <!-- 指定父 POM 的位置 --></parent><!-- 依賴管理 --><dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Starter Data JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- H2 Database --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><!-- Spring Boot Starter Test --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!-- 構建配置 --><build><plugins><!-- Maven Compiler Plugin --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>11</source><target>11</target></configuration></plugin><!-- Spring Boot Maven Plugin --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><!-- 倉庫配置 --><repositories><repository><id>spring-releases</id><url>https://repo.spring.io/release</url></repository></repositories>
</project>

3. 常用依賴

Spring Boot Starter Web: 用于構建 Web 應用,包含 Tomcat 和 Spring MVC。

  • Spring Boot Starter Data JPA: 提供 JPA 支持,用于數據庫操作。
  • Spring Boot Starter Test: 包含測試框架,如 JUnit 和 Mockito。
  • H2 Database: 內嵌數據庫,適合開發和測試環境。

二、注解使用

1. 核心注解

Spring Boot 提供了許多注解,幫助開發者簡化配置和管理應用。以下是一些常用的注解:

  • @SpringBootApplication: 標識主類,啟用自動配置。
  • @RestController: 結合 @Controller@ResponseBody,用于 RESTful 服務。
  • @Service: 標識服務層組件。
  • @Repository: 標識數據訪問層組件。

示例:注解的使用

@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
@RestController
@RequestMapping("/api")
public class HelloController {@GetMapping("/hello")public String sayHello() {return "Hello, Spring Boot!";}
}

2. 配置注解

  • @Configuration: 標識配置類。
  • @Bean: 定義 Spring 管理的 Bean。
  • @Profile: 指定配置在特定環境下的生效。

示例:配置注解的使用

@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyService();}
}

3. 條件注解

  • @ConditionalOnProperty: 當指定屬性存在時生效。
  • @ConditionalOnClass: 當類存在時生效。
  • @ConditionalOnMissingBean: 當 Bean 不存在時生效。

示例:條件注解的使用

@Configuration
public class ConditionConfig {@ConditionalOnProperty(name = "my.property", havingValue = "true")@Beanpublic MyBean myBean() {return new MyBean();}
}

三、配置管理

1. 配置文件

Spring Boot 支持兩種配置文件格式:application.propertiesapplication.yml。配置文件用于管理應用的運行時屬性。

示例:application.properties 配置

# 服務器配置
server.port=8080# 數據源配置
spring.datasource.url=jdbc:h2:mem:mydb
spring.datasource.username=sa
spring.datasource.password=# JPA 配置
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

2. 配置屬性

  • server.port: 配置應用端口。
  • spring.datasource.url: 數據庫連接 URL。
  • spring.jpa.hibernate.ddl-auto: 數據庫表自動創建策略。

3. 環境配置

  • 使用 @PropertySource 引入額外的配置文件。
  • 通過 @Value 注入配置值到 Bean 中。

示例:通過 @Value 注入配置值

@RestController
@RequestMapping("/api")
public class ConfigController {@Value("${my.property}")private String myProperty;@GetMapping("/config")public String getConfig() {return "My Property: " + myProperty;}
}

4. 配置文件加密

Spring Boot 提供了對配置文件中敏感信息的加密功能,確保敏感數據的安全性。

示例:加密配置

# 配置加密密鑰
encrypt.key=MySecretKey# 加密后的配置
my.secret=${encrypt('MySecretValue')}

5. 外部化配置

通過 Spring Cloud Config,可以實現配置的外部化管理,支持從遠程倉庫或服務獲取配置。


四、總結

  • POM 依賴管理: 確保依賴版本一致,避免沖突,優化構建過程。
  • 注解使用: 提高代碼可讀性,簡化配置,實現自動化管理。
  • 配置管理: 靈活調整應用行為,適應不同環境,保護敏感信息。

通過合理運用這三個要素,開發者可以高效地構建、配置和管理 Spring Boot 應用,確保其穩定性和可維護性。希望本文能幫助讀者更好地理解和掌握 Spring Boot 開發的核心技巧!

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

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

相關文章

kubernetes安裝搭建

個人博客站—運維鹿:http://www.kervin24.top/ CSDN博客—做個超努力的小奚&#xff1a; https://blog.csdn.net/qq_52914969?typeblog 一、kubernetes介紹 Kubernetes本質是一組服務器集群&#xff0c;它可以在集群的每個節點上運行特定的程序&#xff0c;來對節點中的容…

MySQL高可用方案之MySQL InnoDB Cluster高可用架構實戰指南:從零搭建到生產部署

MySQL InnoDB Cluster高可用架構實戰指南:從零搭建到生產部署 一、引言:為什么選擇MySQL InnoDB Cluster 在當今數據驅動的商業環境中,數據庫高可用性已成為企業IT基礎設施的核心需求。MySQL作為全球最受歡迎的開源關系型數據庫,其高可用解決方案備受關注。而MySQL InnoD…

祝融號無線電工作頻段

前面深入查證了旅行者1號的無線電工作頻段&#xff1a; 旅行者1號無線電工作頻段-CSDN博客 下面嘗試查證我國祝融號無線電工作頻段。 一、百度百科 來自百度百科&#xff1a; 我注意到一條關鍵信息&#xff1a; 這說明祝融號在國際上是有合作的&#xff0c;而不是我們國家單…

Kafka生產者相關原理

前言前面已經介紹了Kafka的架構知識并引出了Kafka的相關專業名稱進行解釋這次分享一下Kafka對生產者發送消息進行處理的運行機制和原理生產者發送消息兩種方式同步發送消息程序中線程執行完消息發送操作之后會等待Kafka的消息回應ack默認等待30秒沒有回應就會拋出異常等待時間和…

Python 獲取對象信息的所有方法

在 Python 里&#xff0c;我們經常需要檢查一個對象的類型、屬性、方法&#xff0c;甚至它的源碼。這對調試、學習和動態編程特別有用。今天我們就來聊聊獲取對象信息的常見方法&#xff0c;按由淺入深的順序來學習。 參考文章&#xff1a;Python 獲取對象信息 | 簡單一點學習…

vuhub Beelzebub靶場攻略

靶場下載&#xff1a; 下載地址&#xff1a;https://download.vulnhub.com/beelzebub/Beelzebub.zip 靶場攻略&#xff1a; 主機發現&#xff1a; nmap 192.168.163.1/24 端口掃描&#xff1a; nmap -p-65535 -A 192.168.163.152 發現沒有額外端口。 頁面掃描&#xff1…

開啟單片機

前言&#xff1a;為未來拼搏的第n天&#xff0c;從單片機開始。為什么要學習單片機呢&#xff0c;單片機的工作涉及范圍及其廣如&#xff1a;消費電子&#xff0c;游戲機音響&#xff1b;工業控制&#xff1a;機器人控制&#xff1b;醫療設備&#xff0c;通信設備&#xff0c;物…

人工智能系列(8)如何實現無監督學習聚類(使用競爭學習)?

案例&#xff1a;鳶尾花數據集的聚類一.聚類簡介神經網絡能夠從輸入數據中自動提取有意義的特征&#xff0c;而競爭學習規則使得單層神經網絡能夠根據相似度將輸入樣本進行聚類&#xff0c;每個聚類由一個輸出神經元代表并作為該類別的“原型”&#xff0c;從而實現對輸入模式的…

Windows安裝mamba全流程(全網最穩定最成功)

windows系統下安裝mamba會遇到各種各樣的問題。博主試了好幾天&#xff0c;把能踩的坑都踩了&#xff0c;總結出了在windows下安裝mamba的一套方法&#xff0c;已經給實驗室的windows服務器都裝上了。只要跟著我的流程走下來&#xff0c;大概率不會出問題&#xff0c;如果遇到其…

Autosar Dem配置-最大存儲的DTC信息個數配置-基于ETAS軟件

文章目錄 前言 Autosar Dem相關配置 ETAS工具中的配置 生成文件分析 測試驗證 總結 前言 診斷DTC開發中,會有故障快照和擴展數據的存儲需求,但由于控制器的可用存儲空間有限,所以無法存儲所有DTC的信息,這時就需要限制存儲的數量,本文介紹該參數在ETAS軟件中的配置。 Au…

【MySQL】EXISTS 與 NOT EXISTS 深度解析:從原理到實戰的完整指南

在復雜的業務查詢中&#xff0c;我們常常需要判斷“是否存在滿足某條件的記錄”或“找出不滿足某些條件的記錄”。這時&#xff0c;EXISTS 和 NOT EXISTS 子查詢便成為強大的工具。它們不僅邏輯清晰、語義明確&#xff0c;而且在某些場景下性能遠超 IN 或 JOIN。然而&#xff0…

面對信號在時頻平面打結,VNCMD分割算法深度解密

“ 信號迷宮中的破壁者&#xff1a;VNCMD如何分解糾纏的時空密碼&#xff1f;——從鯨歌到機械故障&#xff0c;寬帶信號分解新紀元。”01—痛點直擊&#xff1a;為什么傳統方法集體失效&#xff1f;2017年&#xff0c;上海交大團隊提出了一項突破性研究&#xff1a;變分非線性…

CSS優先級、HTTP響應狀態碼

CSS優先級 優先級&#xff1a;看CSS的來源、樣式引入方式、選擇器、源碼順序。 行內樣式/內聯樣式&#xff1a;直接在HTML元素的style屬性中編寫CSS樣式。這種方式適用于少量樣式的情況&#xff0c;但不推薦在大規模開發中使用&#xff0c;因為它會使HTML文件變得冗長和難以維…

項目一系列-第2章 Git版本控制

第2章 Git版本控制 2.1 Git概述 Git是什么&#xff1f;Git是一個分布式版本控制工具&#xff0c;于管理開發過程中的文件。 Git有哪些作用&#xff1f; 遠程備份&#xff1a;Git可以將本地代碼備份到遠程服務器&#xff0c;防止數據丟失。多人協作&#xff1a;Git運行多個開發者…

Java異常:認識異常、異常的作用、自定義異常

目錄1.什么是異常&#xff1f;1&#xff09;運行時異常2&#xff09;編譯時異常2.異常的作用1&#xff09;Java 異常在定位 BUG 中的核心作用2&#xff09;Java 異常作為方法內部特殊返回值的作用3&#xff09;自定義異常1.什么是異常&#xff1f; Error:代表的系統級別錯誤(屬…

第十九天-輸入捕獲實驗

一、輸入捕獲概述1、輸入捕獲框圖2、輸入捕獲工作詳解①設置輸入捕獲濾波器可以設置濾波&#xff0c;濾除一些高電平脈寬不足的脈沖信號。②設置捕獲極性③輸入捕獲映射④輸入捕獲分頻器這里的捕獲是將計數器的值存入比較寄存器中&#xff0c;分頻次的作用是設置幾個上升沿/下降…

多線程問題,子線程同時操作全局變量,使用后需要清空嗎 ?

背景&#xff1a;目前有一個全局變量 &#xff0c;某個方法中通過多線程&#xff0c;都操作這個變量&#xff0c;向這個全局變量中去添加元素&#xff0c;然后等所有子線程執行完了之后&#xff0c;對這個全局變量進行批量保存&#xff0c;然后這個全局變量還需要手動去清空嗎&…

Netty知識儲備:BIO、NIO、Reactor模型

學習Netty之前&#xff0c;首先先掌握這些基礎知識&#xff1a;阻塞&#xff08;Block&#xff09;與非阻塞&#xff08;Non-Block&#xff09;&#xff0c;同步&#xff08;Synchronous&#xff09;與異步&#xff08;Asynchronous&#xff09;&#xff0c;Java BIO與NIO對比。…

用生成器守住架構,用 AI 放大效率:一套可落地的 AI 編程方法論

背景與問題 現實困境: 直接讓 AI 產出整塊業務代碼&#xff0c;常常與現有架構風格、分層邊界、依賴策略不一致&#xff0c;后續改造成本高&#xff1b;AI 對現實業務語境、領域規則難以精準把握&#xff1b;在既定模板成熟的場景下&#xff0c;代碼生成器往往更快、更整齊。目…

碼頭岸電系統如何保障供電安全?安科瑞絕緣監測及故障定位方案解析

當岸電電網是TN-S系統時&#xff0c;船體未接專用接地線且船舶電網未與岸電零線接通&#xff0c;船舶電網發生單相接地故障時&#xff0c;人站在岸上觸及船體會有觸電危險&#xff0c;零線上可能出現高電壓&#xff0c;單相接地電流大。當船體接專用接地線且船舶電網接入岸電零…