重生之 SpringBoot3 入門保姆級學習(08、properties 和 yml 表示復雜對象)
- 2.5 yml 配置文件
- 2.6 復雜對象用 properties 表示
- 2.7 復雜對象用 yml 表示
2.5 yml 配置文件
- application.properties 配置文件書寫形式
server.port=9999spring.data.redis.host=localhost
spring.data.redis.port=6379
- application.yml 配置文件書寫形式
server:port: 9999spring:data:redis:host: localhostport: 6379
application.yml 的區別:
1、k: v 構成 k: 后面必須有空格,k: 是固定的
2、屬性之間有層級關系,相同層級屬性空格相同
2.6 復雜對象用 properties 表示
- 在 pom.xml 中引用 lombok 刷新后 并 使用 lombok 插件生成 getter、setter、有參構造、無參構造。
- @data 生成 getter、setter
- @AllArgsConstructor 有參構造
- @NoArgsConstructor 無參構造
<dependencies><!--springboot3 Web 依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--redis starter 依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--lombok 依賴--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>
- 創建 Cat 類
package com.zhong.dao;import lombok.Data;/*** @ClassName : Cat* @Description :* @Author : zhx* @Date: 2024-05-27 20:42*/
@Data
public class Cat {private String name;private Integer age;
}
- 創建 Dog 類
package com.zhong.dao;import lombok.Data;/*** @ClassName : Dog* @Description :* @Author : zhx* @Date: 2024-05-27 20:42*/
@Data
public class Dog {private String name;private Integer age;
}
- 創建 Child 類
package com.zhong.dao;import lombok.Data;import java.util.Date;
import java.util.List;/*** @ClassName : Child* @Description :* @Author : zhx* @Date: 2024-05-27 20:40*/
@Data
public class Child {private String name;private Integer age;private Date birthDay;private List<String> text;
}
- 創建 Person 類
package com.zhong.dao;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.Date;
import java.util.List;
import java.util.Map;/*** @ClassName : Person* @Description :* @Author : zhx* @Date: 2024-05-27 20:38*/
@Component
@ConfigurationProperties(prefix = "person")
@Data
public class Person {private String name;private Integer age;private Date brithDay;private Boolean like;private Child child; // 嵌套對象private List<Dog> dogs; // 數組里面嵌套對象private Map<String, Cat> cats; // Map 里面嵌套對象@Overridepublic String toString() {return "Person{" +"\n\tname='" + name + '\'' +", age=" + age +", brithDay=" + brithDay +", like=" + like +", \n\tchild=" + child +", \n\tdogs=" + dogs +", \n\tcats=" + cats +"\n}";}
}
- application.properties
person.name=鐘宏雄
person.age=23
person.brith-day=2024/05/27 21:06:06
person.like=true
person.child.name=小貓
person.child.age=10
person.child.brith-day=2014/05/27 21:06:06
person.child.text[0]=abc
person.child.text[1]=xyz
person.dogs[0].name=小黑
person.dogs[0].age=8
person.dogs[1].name=小白
person.dogs[1].age=6
person.cats.c1.name=小藍
person.cats.c1.age=10
person.cats.c2.name=小灰
person.cats.c2.age=20
- 輸出程序 MainApplication
package com.zhong;import com.zhong.dao.Person;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @ClassName : MainApplication* @Description : 啟動 SpringBoot 項目的入口程序* @Author : zhx* @Date: 2024-05-20 16:20*/
@SpringBootApplication // 標識這是一個 SpringBoot 應用
public class MainApplication {public static void main(String[] args) {var ioc = SpringApplication.run(MainApplication.class, args);Person bean = ioc.getBean(Person.class);System.out.println(bean);}
}
- 輸出結果
Person{name='鐘宏雄', age=23, brithDay=Mon May 27 21:06:06 CST 2024, like=true, child=Child(name=小貓, age=10, birthDay=null, text=[abc, xyz]), dogs=[Dog(name=小黑, age=8), Dog(name=小白, age=6)], cats={c1=Cat(name=小藍, age=10), c2=Cat(name=小灰, age=20)}
}
2.7 復雜對象用 yml 表示
注釋掉 application.properties 的內容
- application.yml(對比 application.properties 的寫法)
person:name: 王萍age: 21brith-day: 2024/05/27 21:06:06like: truechild:name: 小狗age: 10birthDay: 2024/05/27 21:06:06text[0]: deftext[1]: uvwdogs[0]:name: 小綠age: 10dogs[1]:name: 小黃age: 20cats.c1:name: 小橙age: 10cats.c2:name: 小青age: 20
- 標準寫法
person:name: 王萍age: 21brith-day: 2024/05/27 21:06:06like: truechild:name: 小狗age: 10birthDay: 2024/05/27 21:06:06# text: ["def", "uvw"]text:- def- uvwdogs:- name: 小綠age: 10- name: 小黃age: 20cats:c1:name: 小橙age: 10c2: {name:小青, age: 2} # 對象也可以使用 {key:value} 表示
- 輸出結果
Person{name='王萍', age=21, brithDay=Mon May 27 21:06:06 CST 2024, like=true, child=Child(name=小狗, age=10, birthDay=Mon May 27 21:06:06 CST 2024, text=[def, uvw]), dogs=[Dog(name=小綠, age=10), Dog(name=小黃, age=20)], cats={c1=Cat(name=小橙, age=10), c2=Cat(name=小青, age=20)}
}
語法細節
- birthDay 推薦寫為 birth-day
- 文本:
- 單引號不會轉義( \n 則為普通字符顯示)
- 雙引號會轉義 ( \n 則為換行)
- 大文本:
- | 開頭,大文本寫在下層,保留文本格式,換行符正確顯示
- > 開頭,大文本寫在下層,折疊換行符
- 多文檔合并
- 使用 — 可以把多個 yaml 文檔合并在一個文檔中,每個文檔區依然認為內容獨立