springboot入門及application.yaml核心配置文件
什么是SpringBoot
SpringBoot是由Pivotal團隊在2013年開始研發、2014年4月發布第一個版本的全新開源的輕量級框架。springboot是一個快速開發的框架,可以迅速搭建一套基於spring框架體系的應用。
SpringBoot優點
-
獨立運行Spring項目
Spring boot 可以以jar包形式獨立運行,運行一個Spring Boot項目只需要通過java -jar xx.jar來運行
-
內嵌servlet容器
Spring Boot可以選擇內嵌Tomcat、jetty或者Undertow,這樣我們無須以war包形式部署項目
-
提供starter簡化Maven配置
spring提供了一系列的start pom來簡化Maven的依賴加載
-
自動裝配Spring
SpringBoot會對SpringBoot啟動類的子包下的類進行自動裝配
-
准生產的應用監控
SpringBoot提供基於http ssh telnet對運行時的項目進行監控
-
無代碼生產和xml配置
SpringBoot不是借助與代碼生成來實現的,而是通過條件注解來實現的
什么是微服務
微服務是一種用於構建應用的架構方案。微服務架構有別於更為傳統的單體式方案,可將應用拆分為多個核心功能。每個功能都被稱為一項服務,可以單獨構建和部署,各項服務在工作式不會相互印象
springboot與微服務的關系
spring Cloud依賴於springboot,spring boot專注於快速開發個體微服務,spring Cloud是關注全局的微服務協調治理框架
SpringBoot入門
-
New Project
-
點擊Spring Initializr

-
創建項目名稱(jdk版本、及包名等)

-
場景依賴選擇界面

-
存放位置

-
springboot項目會默認生成項目啟動類、存放靜態資源和頁面的文件夾、編寫項目配置的配置文件以及進行項目單元測試的測試類

-
查看自動生成的啟動類
package com.sheep; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }@SpringBootApplication:表示當前類SpringBoot的入口,Application類的存放位置必須是其他相關業務類的存放位置的父級。
-
pom.xml中查看自動生成添加的依賴
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.sheep</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>sheep Spring Boot project</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </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> </plugin> </plugins> </build> </project>springboot依賴管理:
spring-boot-starter-parent:在spring-boot-starter-parent的父依賴spring-boot-dependencies中對框架 的依賴文件進行了統一版本號管理;
啟動器:
spring-boot-starter-web:web依賴啟動器,添加后springboot框架會自動將web所依賴的包全部導入
spring-boot-devtools:熱部署依賴啟動器,· · · devtools所依賴的包全部導入
spring-boot-starter-test:單元測試依賴啟動器,· · · test所依賴的包全部導入
單元測試中的注解:
@RunWith(SpringRunner.class) //測試運行器,並加載SpringBoot測試注解
@SpringBootTest //標記單元測試類,並加載項目的上下文環境ApplicationContext
-
編寫一個Controller
package com.sheep.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/hello") public class HelloController { @GetMapping("/hello") @ResponseBody public String hello(){ return "hello spring boot"; } } -
運行

application.yaml核心配置文件
概念
1、yaml文件格式是SpringBoot支持的一種JSON超文本格式,相對於傳統的properties文件格式,yaml文件以數據為核心,是一種更為直觀且容易被計算機識別的數據序列化格式,application.yaml和application.properties工作原理是一樣的,只不過yaml格式的配置文件更加簡潔。
2、xxx.yaml和xxx.properties是全局配置文件可以對SpringBoot一些默認配置只進行修改,在.yaml和.properties中可以對系統屬性、環境變量、命令參數等信息進行更改配置,在springboot中推薦使用.yaml的格式進行配置。
語法
properties語法:key=value
yaml語法:key: value
- 大小寫敏感
- 使用縮進表示層級關系
- 縮進時不允許使用Tab鍵,只允許使用空格。
- 縮進的空格數目不重要,只要相同層級的元素左側對齊即可
普通寫法
name: sheep
對象寫法
# 寫法一
student1: {name: sheep,age: 3}
# 寫法二
student2:
name: sheep
age: 3
數組寫法
# 寫法一
# list
pets2: [cat,dog,pig]
# map
pets2: {cat: 12,dog: 13,pig: 14}
# 寫法二
# list
pets1:
- cat
- dog
# map
pets2:
cat: 12
dog: 13
pig: 14
多文檔模塊
server:
prot: 8080
---
server:
prot: 8081
---
server:
port: 8082
屬性注入
1、使用@ConfigurationProperties(prefix = "")對屬性注入值(SpringBoot自帶注解)
-
yaml
person: name: 梅西 age: 33 happy: true birth: 2000/08/12 maps: {k1: v1,k2: v2} lists: - code - football - baesball - boxing - outdoor dog: name: 旺財 age: 6 -
javaBean
@Data @AllArgsConstructor @NoArgsConstructor @Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Boolean happy; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; }
2、使用@Value()對屬性賦值(Spring框架注解)
-
JavaBean
@Data @AllArgsConstructor @NoArgsConstructor @Component public class Person { @Value("梅西") private String name; @Value("33") private Integer age; private Boolean happy; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; }
3、兩種注解對比
-
@ConfigurationProperties與@Value
對比點 @ConfigurationProperties @Value 底層框架 SpringBoot Spring 功能 批量注入配置文件中的屬性 單個注入 setter方法 需要 不需要 復雜類型屬性注入 支持 不支持 松散綁定 支持 不支持 JSR303數據校驗 支持 不支持 SqEL表達式 不支持 支持
松散綁定、SqEL表達式和JSR303數據校驗
-
松散綁定
松散綁定是當注入的屬性名與bean中的不一致是仍然可以實現屬性賦值;使用@ConfigurationProperties注解配
置文件時支持松散語法綁定;
proson: {mName: 梅西} //標准寫法 proson: {m-Name: 梅西} //可以使用-線 proson: {m_Name: 梅西} //可以使用_線 proson: {M_NAME: 梅西} //可以使用大小寫格式 -
SqEL表達式
SqEL表達式即不使用配置文件的情況下直接使用@Value("#{5*2}"),直接對屬性賦值
-
JSR303數據校驗
對前端傳過來的數據進行校驗
yaml
messi: esail: 123e age: 33javaBean
@Data @AllArgsConstructor @NoArgsConstructor @Component @ConfigurationProperties(prefix = "messi") public class Messi{ @Email(message="郵箱格式錯誤") private String email; @Value("33") private Integer age; }如果異常控制台將會顯示打印異常
JSR303數據校驗詳細:https://blog.csdn.net/weixin_44440642/article/details/106335653
多環境配置
-
多個yaml文件配置和yaml的優先級
-
當有多個.yaml或者.properties文件時可以使用@PropertySource(value = "")指定文件
JavaBean
@Data @AllArgsConstructor @NoArgsConstructor @Component @PropertySource(value = "classpath:sheep.yaml")//指定那個文件 public class Person { private String name; private Integer age; private Boolean happy; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; } -
在SpringBoot項目中可以在多個位置定義.yaml配置文件;在不同位置指定的.yaml優先級都不一樣

上圖對應的分別為:
file:./config/:項目的config報下—優先級1file:./:項目文件下—優先級2classpath:/config/:類路徑config報下—優先級3classpath:/:類路徑下—優先級4
-
-
yaml多個運行環境配置
當應用程序需要部署到不同的運行環境中時,比如:開發環境、測試環境、生產環境,可以使用不同的properties文件配置。
-
properties方式
在配置多個環境時為.yaml取名必須要求取名比如:
application-{prifile}.yamlapplication-dev.properties # 開發環境配置 application-test.properties # 測試環境配置 application-prod.properties # 生產環境配置使用相應的環境時在全局配置文件中開啟
spring.profiles.action=dev -
yaml方式
server: port: 8080 spring: profiles: active: test # 開啟test環境,如果不使用默認8080 --- server: port: 8081 spring: profiles: dev --- server: port: 8082 spring: profiles: test
-
隨機值設置和參數間引用
-
隨機值設置:${random.xxx},xxx表示指定生成隨機數的范圍和類型
person: name: 梅西${random.uuid} # 隨機生成UUID類型數 age: ${random.int} # 隨機生成int類型數 happy: true birth: 2000/08/12 maps: {k1: v1,k2: v2} lists: - code - football - baesball - boxing - outdoor dog: name: 旺財 age: 6常用隨機數
${random.value} # 隨機字符串 ${random.int} # 隨機整數 ${random.long} # 隨機long類型數 ${random.uuid} # 隨機UUID類型數 ${random.int(10)} # 小於10的隨機整數 ${random.int[1024,2000]} # 在[1024,2000]之間的隨機整數 -
參數間引用:顧名思義先配置的參數可以在后配置的參數中使用
person: name: 梅西${random.uuid} # 隨機生成UUID類型數 age: ${random.int} # 隨機生成int類型數 happy: true birth: 2000/08/12 maps: {k1: v1,k2: v2} hello: happy lists: - code - football - baesball - boxing - outdoor dog: name: ${person.hello:hello}_旺財 # 參數間引用如果hello參數存在則happy__旺財,否則hello_參數 age: 6
