springboot入門及application.yaml核心配置文件


springboot入門及application.yaml核心配置文件

什么是SpringBoot

SpringBoot是由Pivotal團隊在2013年開始研發、2014年4月發布第一個版本的全新開源的輕量級框架。springboot是一個快速開發的框架,可以迅速搭建一套基於spring框架體系的應用。

SpringBoot優點

  1. 獨立運行Spring項目

    Spring boot 可以以jar包形式獨立運行,運行一個Spring Boot項目只需要通過java -jar xx.jar來運行

  2. 內嵌servlet容器

    Spring Boot可以選擇內嵌Tomcat、jetty或者Undertow,這樣我們無須以war包形式部署項目

  3. 提供starter簡化Maven配置

    spring提供了一系列的start pom來簡化Maven的依賴加載

  4. 自動裝配Spring

    SpringBoot會對SpringBoot啟動類的子包下的類進行自動裝配

  5. 准生產的應用監控

    SpringBoot提供基於http ssh telnet對運行時的項目進行監控

  6. 無代碼生產和xml配置

    SpringBoot不是借助與代碼生成來實現的,而是通過條件注解來實現的

什么是微服務

​ 微服務是一種用於構建應用的架構方案。微服務架構有別於更為傳統的單體式方案,可將應用拆分為多個核心功能。每個功能都被稱為一項服務,可以單獨構建和部署,各項服務在工作式不會相互印象

springboot與微服務的關系

​ spring Cloud依賴於springboot,spring boot專注於快速開發個體微服務,spring Cloud是關注全局的微服務協調治理框架


SpringBoot入門

  1. New Project

  2. 點擊Spring Initializr

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

  4. 場景依賴選擇界面

  5. 存放位置

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

  7. 查看自動生成的啟動類

    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類的存放位置必須是其他相關業務類的存放位置的父級。

  8. 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

  9. 編寫一個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";
        }
    }
    
  10. 運行


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: 33
    

    javaBean

    @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

多環境配置

  1. 多個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報下—優先級1

      file:./:項目文件下—優先級2

      classpath:/config/:類路徑config報下—優先級3

      classpath:/:類路徑下—優先級4

  2. yaml多個運行環境配置

    當應用程序需要部署到不同的運行環境中時,比如:開發環境、測試環境、生產環境,可以使用不同的properties文件配置。

    • properties方式

      在配置多個環境時為.yaml取名必須要求取名比如:application-{prifile}.yaml

      application-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
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM