欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot?配置文件給實(shí)體注入值方式

 更新時(shí)間:2022年02月17日 16:51:48   作者:Chains-X??  
這篇文章主要介紹了SpringBoot?配置文件給實(shí)體注入值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

配置文件給實(shí)體注入值

SpringBoot 默認(rèn)的全局配置文件有兩個(gè) application.properties 和application.yml

properties用法

# 例如修改端口號(hào) 直接賦值
server.port=8888

yaml用法

# 例如修改端口號(hào)
server:
?? ?port: 8888
  • YML中賦值是以鍵值對(duì)的形式,且利用縮進(jìn)表示層級(jí)關(guān)系,同一級(jí)縮進(jìn)必須一致
  • 大小寫敏感,支持松散寫法,且冒號(hào)后面必須有一個(gè)空格

通過配置文件給實(shí)體類注入屬性

// 實(shí)體類
@Component // 把實(shí)體類放入到spring容器中
@ConfigurationProperties(prefix = "student") // 識(shí)別配置文件
public class Student {
    private String name;
    private int age;
    private boolean sex;
    private Date birthday;
    private Map<String, Object> location;
    private String[] hobbies;
    private List<String> skills;
    private Pet pet;
    
    // .... set/get/toString
}
# yml 配置文件
student: 
	name: zs
	age: 23
	sex: true
	birthday: 2020/10/1
	location: {province: 湖北,city: 武漢, zone: 洪山}
	hobbies: [足球, 籃球]
	skills: [編程, 金融]
	pet: 
		nickName: wc
		strain: hsq

在這里注意不同數(shù)據(jù)類型的寫法,簡(jiǎn)單的數(shù)據(jù)直接賦值

# map類型和對(duì)象類型 的兩種寫法
# 1.行內(nèi)寫法
location: {province: 湖北,city: 武漢, zone: 洪山}
pet: {nickName: wc, strain: hsq}
# 2.分行寫
location:
	province: 湖北
	city: 武漢
	zone: 洪山
pet: 
	nickName: wc
	strain: hsq
# 數(shù)組、list、set
# 1、行內(nèi)寫法, 其中中括號(hào)還可以省略
hobbies: [足球, 籃球]
skills: [編程, 金融]
# 2、分行寫
hobbies:
	- 足球
	- 籃球
skills: 
	- 編程
	- 金融

到 SpringBoot 測(cè)試文件中測(cè)試輸出

? ? @Autowired
? ? Student student;
? ? @Test
? ? void contextLoads() {
? ? ? ? System.out.println(student);
? ? }

結(jié)果

Student{name='zs', age=23, sex=true, birthday=Thu Oct 01 00:00:00 CST 2020, location={province=湖北, city=武漢, zone=洪山}, hobbies=[足球,籃球], skills=[編程, 金融], pet=Pet{nickName='wc', strain='hsq'}}

上面yml中注意

# 如果對(duì)字符串加單引號(hào),雙引號(hào)會(huì)有什么區(qū)別
location: {province: "湖北",city: '武漢', zone: 洪山}
# 如果引號(hào)中只是字符串時(shí)沒什么區(qū)別
location: {province: "湖\n北",city: '武\n漢', zone: 洪\n山}
# 此時(shí)雙引號(hào)中的轉(zhuǎn)義字符會(huì)被識(shí)別,會(huì)換行,單引號(hào)和不加引號(hào)會(huì)原樣輸出

也可以使用properties注入

student.name=ls
student.age=24
...

其中properties文件和yml文件中的值可以互相引用。兩個(gè)配置文件可以互補(bǔ),properties文件優(yōu)先級(jí)高于yml

另外如果要注入的值不在這兩個(gè)默認(rèn)配置文件中,這是需要使用@PropertySource注解,遺憾的是該注解只支持properties文件,不支持yml文件

@PropertySource(value = {"classpath:conf.properties"})
public class Student {
?? ?...

配置文件值注入方式

1.1 從全局配置文件中讀取配置到實(shí)體類 (@ConfigurationProperties)

配置文件 (application.yml)(寫在application.properties也可以,格式變一下即可)

person:
  lastName: Mary
  age: 16
  birthDate: 2004/01/01
  maps: {one:1,two:2,three:3}
  lists:
    - 1
    - 2
    - 3
  pet:
    name: wangcai
    age: 3

實(shí)體類(javaBean):

/**
 * 將配置文件中配置的每一個(gè)屬性的值,映射到這個(gè)組件中
 *
 * @Component:
 *     只有這個(gè)組件是容器中的組件,才能容器提供的@ConfigurationProperties功能;
 *
 * @ConfigurationProperties:
 *     告訴SpringBoot將本類中的所有屬性和配置文件中相關(guān)的配置進(jìn)行綁定(默認(rèn)配置文件為application.properties與      
 *     application.yml);
 *
 * prefix = "person":
 *       配置文件中哪個(gè)下面的所有屬性進(jìn)行一一映射
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Date birthDate;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Pet pet;
    //省略get,set方法
    @Override
    public String toString() {
        String mapValue = "";
        
        if(this.maps!=null){
            for(String key:this.maps.keySet()){
                Object value = this.maps.get(key);
                mapValue += key+"\t"+value+"\t";
            }
        }
        return "lastName:"+this.lastName+
                "\nage:"+this.age+
                "\nbirthDate:"+this.birthDate+
                "\nmaps:"+mapValue+
                "\nlists:"+this.lists+
                this.pet;
    }
}
public class Pet {
    private String name;
    private Integer age;
    //省略get,set方法
    
    @Override
    public String toString() {
        return "\nPet:\n\tPet name:"+this.name+
                "\n\tPet age:"+this.age+"\n";
    }
}

我們可以導(dǎo)入配置文件處理器,以后編寫配置就有提示了(pom.xml)

<!--導(dǎo)入配置文件處理器,配置文件進(jìn)行綁定就會(huì)有提示-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

測(cè)試

@SpringBootTest
class DemoApplicationTests {
    @Autowired
    Person person;
    @Test
    void contextLoads() {
        System.out.println(person.toString());
    }
}

1.2 全局配置文件注入值(@Value)

@Value 其實(shí)是Spring中的注解,其功能使用xml文件描述是這樣的:

?<bean class="Person">
? ? ?<property name="lastName" value="字面量/${key}從環(huán)境變量、配置文件中獲取值/#{SpEL}"></property>
?<bean/>

其中property表示的是Person類中的各項(xiàng)屬性,name用于指定具體屬性,value用于指定值。

value的值主要有3種:

  • 字面量,也就是數(shù)字(1,2…)、字符串(abc)、布爾變量(true、false)等常量
  • ${key},從環(huán)境變量、配置文件中獲取值
  • #{SpEL}, Spring的表達(dá)式語(yǔ)言,可以執(zhí)行一些計(jì)算,調(diào)用一些函數(shù)
@Component
public class Person {
    @Value("${person.last-name}")  //@Value("#{'Lily'.toUpperCase()}")
    private String lastName;
    @Value("#{11*2}")
    private Integer age;
    private Date birthDate;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Pet pet;    
    //省略get,set和toString    
}

1.3 從指定文件讀取并配置實(shí)體類(@PropertySource+@ConfigurationProperties)

在 resources 目錄下創(chuàng)建 person.properties

person.lastName = Lily
person.age = 20
person.birthDate = 2000/01/01
person.maps.one = 1
person.maps.two = 2
person.lists = a,b,ch
person.pet.name = wangcai
person.pet.age = 3

更改 Person 類中的注解

@Component
@PropertySource(value = {"classpath:person.properties"})
@ConfigurationProperties(prefix = "person")
public class Person {
    //...省略屬性,get,set,toString
}

要注意的是,PropertySource 只支持properties文件,不支持yml文件讀取。

1.4 從指定文件讀取并注入值(@PropertySource+@Value)

創(chuàng)建配置文件

更改注釋

@Component
@PropertySource(value = {"classpath:person.properties"})
public class Person {    
    @Value("${person.last-name}")
    private String lastName;    
    //...省略屬性,get,set,toString
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • WebClient拋UnsupportedMediaTypeException異常解決

    WebClient拋UnsupportedMediaTypeException異常解決

    這篇文章主要為大家介紹了WebClient拋UnsupportedMediaTypeException異常的解決方案,文中給大家介紹了六中方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • Java連接Hbase的項(xiàng)目實(shí)踐

    Java連接Hbase的項(xiàng)目實(shí)踐

    HBase是基于Hadoop的高可靠、高性能、面向列的NoSQL數(shù)據(jù)庫(kù),它提供了對(duì)海量數(shù)據(jù)的存儲(chǔ)和實(shí)時(shí)讀寫的能力,本文主要介紹了Java連接Hbase的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • java交換排序之奇偶排序?qū)崿F(xiàn)方法

    java交換排序之奇偶排序?qū)崿F(xiàn)方法

    這篇文章主要介紹了java交換排序之奇偶排序?qū)崿F(xiàn)方法,實(shí)例分析了奇偶排序的原理與具體實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Java反射框架Reflections示例詳解

    Java反射框架Reflections示例詳解

    這篇文章主要介紹了Java反射框架Reflections示例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • java 中模擬TCP傳輸?shù)目蛻舳撕头?wù)端實(shí)例詳解

    java 中模擬TCP傳輸?shù)目蛻舳撕头?wù)端實(shí)例詳解

    這篇文章主要介紹了java 中模擬TCP傳輸?shù)目蛻舳撕头?wù)端實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 基于Spring Boot的Logback日志輪轉(zhuǎn)配置詳解

    基于Spring Boot的Logback日志輪轉(zhuǎn)配置詳解

    本篇文章主要介紹了基于Spring Boot的Logback日志輪轉(zhuǎn)配置詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 關(guān)于Java中byte[]?和?String互相轉(zhuǎn)換問題

    關(guān)于Java中byte[]?和?String互相轉(zhuǎn)換問題

    這篇文章主要介紹了Java中byte[]?和?String互相轉(zhuǎn)換問題,通過用例給大家介紹了通過String類將String轉(zhuǎn)換成byte[]或者byte[]轉(zhuǎn)換成String,具體實(shí)例代碼跟隨小編一起看看吧
    2022-01-01
  • SpringBoot2 集成log4j2日志框架的實(shí)現(xiàn)

    SpringBoot2 集成log4j2日志框架的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot2 集成log4j2日志框架的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 使用springboot通過spi機(jī)制加載mysql驅(qū)動(dòng)的過程

    使用springboot通過spi機(jī)制加載mysql驅(qū)動(dòng)的過程

    這篇文章主要介紹了使用springboot通過spi機(jī)制加載mysql驅(qū)動(dòng)的過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot整合RestTemplate用法的實(shí)現(xiàn)

    SpringBoot整合RestTemplate用法的實(shí)現(xiàn)

    本篇主要介紹了RestTemplate中的GET,POST,PUT,DELETE、文件上傳和文件下載6大常用的功能,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08

最新評(píng)論