SpringBoot配置文件.yaml(.yml)和.properties

很多優(yōu)秀的框架都有自己的配置文件爹袁, 比如hibernate有hbm铝噩,mybatis 有properties配置文件趟庄。
Springboot使用一個(gè)全局的配置文件显拳,而且配置文件的名字是固定的棚愤。 有兩種

  • application.properties
  • application.yml

springboot 配置文件的作用是用來 修改SpringBoot自動(dòng)配置的默認(rèn)值;SpringBoot在底層都給我們自動(dòng)配置好杂数; 像我們Tomcat 啟動(dòng) 默認(rèn)配置端口是8080 . 如果要修改宛畦, 我們就在這兩個(gè)文件的一種中來修改,

  • YML (也叫YAML : YAM Ain't Markup Language)**

YAML Ain't Markup Language 這是一個(gè)遞歸寫法 揍移;

  1. YAML A Markup Language:是一個(gè)標(biāo)記語言
  2. YAML isn't Markup Language:不是一個(gè)標(biāo)記語言次和;

標(biāo)記語言: 我們以前用的配置文件,大多都使用 xxxx.xml 文件 那伐;

YAML : 是一種以數(shù)據(jù)為中心的配置文件踏施, 比json,xml 等更適合做配置文件

舉個(gè)栗子:

以 修改端口為例 :

yml : 
server:
  port: 8081

xml :
<server>
    <port>8081</port>
</server> 

xml 配置 將太多的浪費(fèi)在了標(biāo)簽上面。

yml 基本語法:

k:(空格)v:表示一對鍵值對(空格必須有)罕邀;
以 空格 的縮進(jìn)來控制層級(jí)關(guān)系畅形;只要是左對齊的一列數(shù)據(jù),都是同一個(gè)層級(jí)的

server:
    port: 8081 
    path: /hello

屬性和值也是大小寫敏感诉探;

值的寫法:

  • 字面量:普通的值(數(shù)字日熬,字符串,布爾)

k: v:字面直接來寫肾胯;
字符串默認(rèn)不用加上單引號(hào)或者雙引號(hào)竖席;

"":雙引號(hào);不會(huì)轉(zhuǎn)義字符串里面的特殊字符阳液;特殊字符會(huì)作為本身想表示的意思

    name:   "zhangsan \n lisi":輸出怕敬;zhangsan 換行  lisi

'':單引號(hào);會(huì)轉(zhuǎn)義特殊字符帘皿,特殊字符最終只是一個(gè)普通的字符串?dāng)?shù)據(jù)

  • 對象、Map(屬性和值)(鍵值對):

k: v:在下一行來寫對象的屬性和值的關(guān)系畸陡;注意縮進(jìn)
對象還是k: v的方式

friends:
        lastName: zhangsan
        age: 20
行內(nèi)寫法: 
friends: {lastName: zhangsan,age: 18}
  • 配置文件注入

javaBean :

image

可以導(dǎo)入配置文件處理器依賴鹰溜,以后編寫配置就會(huì)有代碼提示虽填;

image.png

代碼展示配置文件注入屬性值 :

package com.example.webservice.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 *
 * ConfigurationProperties(prefix ="person") 將本類中的所有屬性和配置文件中的相關(guān)配置進(jìn)行綁定
 * prefix ="person  表示對哪個(gè)文件進(jìn)行綁定
 * Component 表示這是一個(gè)容器, 只有在容器中  ConfigurationProperties 才能使用
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

     private String name;
     private Integer age;
     private boolean man;
     private Date birth;
     private Map<String,Object>map;
     private List<Object>list ;
     private Son son ;

.....省略get/set  以及toString 方法

}


package com.example.webservice.bean;

public class Son {

    private String name;
    private Integer age ;

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Son{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
}

properties文件綁定的寫法

person.name=爸爸
person.age=45
person.man=true
person.birth=2019/8/8
person.map.k1=h1
person.map.k2=h2
person.list=a,1,son
person.son.name=兒子
person.son,age=20

yml 文件綁定的寫法:

person:
  name: 爸爸
  age: 25
  birth: 2018/2/8
  man: true
  list:
    - a
    - 2
    - son
  map: {key1:value1,key2:value2}
  son:
    name: 兒子
    age: 5

測試類 : 在我們的test 文件夾下 :

package com.example.webservice;
import com.example.webservice.bean.Person;
import org.junit.Test;import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class WebserviceApplicationTests {    
   @Autowired
    Person person;
   @Test
   public void contextLoads() {
      // 直接運(yùn)行這個(gè)方法 曹动,而不是運(yùn)行整個(gè)程序
       System.out.println(person);                
       System.out.println("********************************************************");
   }
}

1斋日、什么是yml什么是properties?

對于剛接觸springboot的同學(xué),肯定存在一時(shí)搞不清楚yml和properties配置文件有什么區(qū)別墓陈。首先恶守,無論是yml還是properties,都是SpringBoot配置文件中的一種格式贡必,默認(rèn)名為application.yml或application.properties 兔港,默認(rèn)放在resources文件夾下,當(dāng)然仔拟,放在resources/config文件夾下也是可以讀取到的衫樊。

2、各自的優(yōu)點(diǎn)利花?

下面我們以配置redis緩存數(shù)據(jù)庫的配置文件為例子進(jìn)行說明:

yml格式配置文件:

image

properties格式配置文件:

image

可以看到科侈,yml格式的配置文件有著可讀性更強(qiáng)的樹型結(jié)構(gòu),也更加簡潔炒事,但對于新手而言臀栈,properties格式的配置文件也是不錯(cuò)的選擇,易于理解挠乳,總之挂脑,兩種格式的配置文件殊途同歸,springboot項(xiàng)目都可以識(shí)別欲侮。

3崭闲、yml格式配置文件寫法和坑點(diǎn)

對于properties格式的配置文件,我無需多言威蕉,所有學(xué)習(xí)springboot的同學(xué)最開始接觸的還是properties格式的配置文件刁俭。那么properties格式配置文件如何轉(zhuǎn)yml格式呢?

(1)不同等級(jí)用冒號(hào)隔開韧涨,次等級(jí)前用空格牍戚,不能用制表符tab,如spring.redis.host=127.0.0.1配置文件中虑粥,spring作為第一級(jí)如孝,redis作為第二級(jí).
(2)如果冒號(hào)后是值,則用一個(gè)空格將冒號(hào)和值隔開娩贷。
(3)坑點(diǎn):yml格式中一定不要用制表符tab,冒號(hào)和值之間一定要有空格第晰。

4、總結(jié)

兩種配置文件在 springboot中都可以識(shí)別,用其中一種就可以茁瘦。如果一個(gè)目錄下存在兩種格式的配置文件品抽,則先讀取properties格式的配置文件,后讀取yml格式的配置文件甜熔。讀取到的配置以第一次的為準(zhǔn)圆恤。

控制臺(tái)打印結(jié)果 (使用的 yml 配置文件)

image

properties配置文件在idea中默認(rèn)utf-8可能會(huì)亂碼 。因?yàn)閟pring properties 默認(rèn)是ASCII 碼 腔稀,所以需要將properties 默認(rèn)編碼改為UTP-8 盆昙,再√上旁邊的 將其運(yùn)行時(shí)轉(zhuǎn)換為ASCII碼;再輸入中文就好了

image

都改成utf-8 焊虏,再輸入中文就好了淡喜。

  • @Value獲取值和@ConfigurationProperties獲取值比較**

@ConfigurationProperties @Value
功能 批量注入配置文件中的屬性 一個(gè)個(gè)指定
松散綁定(松散語法) 支持 不支持
SpEL 不支持 支持
JSR303數(shù)據(jù)校驗(yàn) 支持 不支持
復(fù)雜類型封裝 支持 不支持

配置文件yml還是properties他們都能獲取到值;
如果說炕淮,我們只是在某個(gè)業(yè)務(wù)邏輯中需要獲取一下配置文件中的某項(xiàng)值拆火,使用@Value;
如果說涂圆,我們專門編寫了一個(gè)javaBean來和配置文件進(jìn)行映射们镜,我們就直接使用@ConfigurationProperties;

  • 配置文件注入值數(shù)據(jù)校驗(yàn)

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

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

   //name必須是郵箱格式
    @Email
    //@Value("${person.name}")
    private String name;
    //@Value("#{11*2}")
    private Integer age;
    //@Value("true")
    private Boolean boss;

    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
模狭。。踩衩。嚼鹉。。get/set /toString 

@PropertySource&@ImportResource&@Bean
@PropertySource:加載指定的配置文件驱富;

/**
 * 將配置文件中配置的每一個(gè)屬性的值锚赤,映射到這個(gè)組件中
 * @ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和配置文件中相關(guān)的配置進(jìn)行綁定;
 *      prefix = "person":配置文件中哪個(gè)下面的所有屬性進(jìn)行一一映射
 *
 * 只有這個(gè)組件是容器中的組件褐鸥,才能容器提供的@ConfigurationProperties功能线脚;
 *  @ConfigurationProperties(prefix = "person")默認(rèn)從全局配置文件中獲取值;
 *
 */
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person {

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

   //name必須是郵箱格式
   // @Email
    //@Value("${person.name}")
    private String name;
    //@Value("#{11*2}")
    private Integer age;
    //@Value("true")
    private Boolean boss;

@ImportResource:導(dǎo)入Spring的配置文件浑侥,讓配置文件里面的內(nèi)容生效;
Spring Boot里面沒有Spring的配置文件晰绎,我們自己編寫的配置文件寓落,也不能自動(dòng)識(shí)別;

想讓Spring的配置文件生效荞下,加載進(jìn)來伶选;就要將 @ImportResource 標(biāo)注在一個(gè)配置類上

@ImportResource(locations = {"classpath:beans.xml"})//類路徑上添加配置類的路徑
導(dǎo)入Spring的配置文件讓其生效

不來編寫Spring的配置文件 史飞,下面這就是我們通常的Spring配置類文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="helloService" class="com.example.webservice.controller.Hello"></bean>
</beans>

SpringBoot推薦給容器中添加組件的方式;推薦使用全注解的方式

1考蕾、配置類@Configuration------>Spring配置文件

2祸憋、使用@Bean給容器中添加組件

/**
 * @Configuration:指明當(dāng)前類是一個(gè)配置類会宪;就是來替代之前的Spring配置文件
 *
 * 在配置文件中用<bean><bean/>標(biāo)簽添加組件
 *
 */
@Configuration
public class MyAppConfig {

    //將方法的返回值添加到容器中肖卧;容器中這個(gè)組件默認(rèn)的id就是方法名
    @Bean
    public HelloService helloService02(){
        System.out.println("配置類@Bean給容器中添加組件了...");
        return new HelloService();
    }
}

配位文件占位符

1、隨機(jī)數(shù)

${random.value}掸鹅、${random.int}塞帐、${random.long}
${random.int(10)}、${random.int[1024,65536]}

2巍沙、占位符獲取之前配置的值葵姥,如果沒有可以是用:指定默認(rèn)值

 properties
  person.name=張三${random.uuid}
  person.age=${random.int}
  person.birth=2017/12/15
  person.boss=false
  person.maps.k1=v1
  person.maps.k2=14
  person.lists=a,b,c

// 如果沒有hello這個(gè)屬性, 則會(huì)直接輸出 ${person.hello} 句携, 如果加了 ${person.hello:hello}_dog   則會(huì)直接賦值 輸出

hello_dog 
  person.dog.name=${person.hello:hello}_dog  
  person.dog.age=15

3榔幸、Profile
1、多Profile文件
我們在主配置文件編寫的時(shí)候矮嫉,文件名可以是 application-{profile}.properties/yml
springboot默認(rèn)使用配置文件為application.properties削咆;

所以我們在然后在application.properties配置文件中 激活自定義的環(huán)境配置文件就可以了從application.properties 加載到application-dev.properties 文件了

在配置文件中指定 spring.profiles.active=dev

image
image

2、yml支持多文檔塊方式

  server:
    port: 8081
  spring:
    profiles:
      active: prod  表示當(dāng)前激活使用哪個(gè)環(huán)境  --- 表示環(huán)境的分割 蠢笋,分成不同的文檔塊拨齐。
  ---
  server:
    port: 8083
  spring:
   profiles: dev
 ---
 server:
   port: 8084
 spring:
   profiles: prod  #指定屬于哪個(gè)環(huán)境

4、激活指定profile
? 1昨寞、在配置文件中指定 spring.profiles.active=dev
? 2瞻惋、命令行:
? java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
? 可以直接在測試的時(shí)候援岩,配置傳入命令行參數(shù) 歼狼,打包好的項(xiàng)目運(yùn)行的時(shí)候指定我們的環(huán)境:

image

? 3、虛擬機(jī)參數(shù)享怀; 在運(yùn)行的時(shí)候 選擇Editor configrations

image
image

-Dspring.profiles.active=dev

5羽峰、配置文件加載位置

springboot 啟動(dòng)會(huì)掃描以下位置的application.properties或者application.yml文件作為Spring boot的默認(rèn)配置文件
–file:./config/     文件路徑config目錄--->最高優(yōu)先級(jí)
–file:./       文件路徑根目錄--->其次
–classpath:/config/ 類路徑config目錄--->再其次
–classpath:/     類路徑根目錄--->最低優(yōu)先級(jí)

優(yōu)先級(jí)由高到底,高優(yōu)先級(jí)的配置會(huì)覆蓋低優(yōu)先級(jí)的配置凹蜈;
SpringBoot會(huì)從這四個(gè)位置全部加載主配置文件:互補(bǔ)配置限寞;
我們還可以通過spring.config.location來改變默認(rèn)的配置文件位置
項(xiàng)目打包好以后,我們可以使用命令行參數(shù)的形式仰坦,啟動(dòng)項(xiàng)目的時(shí)候來指定配置文件的新位置履植;指定配置文件和默認(rèn)加載的這些配置文件共同起作用形成互補(bǔ)配置;
進(jìn)入命令行 :

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties(properties的硬盤文件目錄)

6悄晃、外部配置加載順序
SpringBoot也可以從以下位置加載配置玫霎; 優(yōu)先級(jí)從高到低凿滤;高優(yōu)先級(jí)的配置覆蓋低優(yōu)先級(jí)的配置,所有的配置會(huì)形成互補(bǔ)配置
1.命令行參數(shù)
所有的配置都可以在命令行上進(jìn)行指定
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc
多個(gè)配置用空格分開庶近; --配置項(xiàng)=值
2.來自java:comp/env的JNDI屬性
3.Java系統(tǒng)屬性(System.getProperties())
4.操作系統(tǒng)環(huán)境變量
5.RandomValuePropertySource配置的random.*屬性值

由jar包外向jar包內(nèi)進(jìn)行尋找翁脆;

優(yōu)先加載帶profile

7.jar包外部的application-{profile}.properties或application.yml(帶spring.profile)配置文件

8.jar包內(nèi)部的application-{profile}.properties或application.yml(帶spring.profile)配置文件

再來加載不帶profile

9.jar包外部的application.properties或application.yml(不帶spring.profile)配置文件

10.jar包內(nèi)部的application.properties或application.yml(不帶spring.profile)配置文件

11.@Configuration注解類上的@PropertySource

12.通過SpringApplication.setDefaultProperties指定的默認(rèn)屬性

所有支持的配置加載來源;

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

2.yml文件

name: hha
age: 60
friend:
       - good
       - easy
       - bug
params:
      addr: ZZ
      code: EE
name: 洗洗

3.實(shí)體類

package com.my.last;

import java.util.List;
import java.util.Map;

public class Student { private String name;
    private int age;

    private List<String> friend ;

    private Map<String, Object> params; /**
     * @return the name */ public String getName() {
        return name; }

    /**
     * @param name the name to set */ public void setName(String name) { this.name = name; }

    /**
     * @return the age */ public int getAge() { return age; }

    /**
     * @param age the age to set */ public void setAge(int age) { this.age = age; }

    /**
     * @return the friend */ public List<String> getFriend() { return friend; }

    /**
     * @param friend the friend to set */ public void setFriend(List<String> friend) { this.friend = friend; }

    /**
     * @return the params */ public Map<String, Object> getParams() { return params; }

    /**
     * @param params the params to set */ public void setParams(Map<String, Object> params) { this.params = params; }

    /* (non-Javadoc)
     * @see java.lang.Object#toString() */ @Override
    public String toString() { return "Student [name=" + name + ", age=" + age + ", friend=" + friend + ", params=" + params + "]"; } }

4.測試類

package com.my.last;

import org.yaml.snakeyaml.Yaml;

public class Test { public static void main(String[] args) {
        Yaml yaml = new Yaml();

        Student student = yaml.loadAs(Test.class.getResourceAsStream("/test.yml"), Student.class);
        System.out.println(student); }
} 

** 或者依賴**

<dependency>
            <groupId>org.jyaml</groupId>
            <artifactId>jyaml</artifactId>
            <version>1.3</version>
        </dependency>

解析方法:

        Student student2 = null; try {
             student2 = org.ho.yaml.Yaml.loadType(Test.class.getResourceAsStream("/test.yml"), Student.class);
        } catch (FileNotFoundException e) { // TODO Auto-generated catch block
 e.printStackTrace();
        }
        System.out.println(student2);</pre>

二者區(qū)別

在于其擁有天然的樹狀結(jié)構(gòu)鼻种,所以著手嘗試將properties文件更改為yml文件反番,發(fā)現(xiàn)了幾個(gè)要注意的地方:
1、在properties文件中是以”.”進(jìn)行分割的叉钥, 在yml中是用”:”進(jìn)行分割;
2罢缸、yml的數(shù)據(jù)格式和json的格式很像,都是K-V格式投队,并且通過”:”進(jìn)行賦值枫疆;
3、在yml中縮進(jìn)一定不能使用TAB敷鸦,否則會(huì)報(bào)很奇怪的錯(cuò)誤息楔;(縮進(jìn)特么只能用空格!0桥V狄馈!)
4谎碍、yml每個(gè)k的冒號(hào)后面一定都要加一個(gè)空格鳞滨;
5、使用spring cloud的maven進(jìn)行構(gòu)造的項(xiàng)目蟆淀,在把properties換成yml后拯啦,一定要進(jìn)行mvn clean insatll
6、yml是跨語言的:可以在包括JAVA熔任,go褒链,python等大量的語言中使用,比如做云計(jì)算使用go和java的時(shí)候疑苔,可以通過配置中心使用同一份配置甫匹!
7、支持列表:區(qū)別于properties只支持鍵值對數(shù)據(jù)惦费,yml配置文件支持列表兵迅,如下所示:

image

當(dāng)然,從properties轉(zhuǎn)yml文件會(huì)遇到很多坑薪贫,在此記錄下:

1恍箭,層級(jí)關(guān)系縮進(jìn)不能用tab鍵:每次都數(shù)2.4.6這樣打空格。瞧省。扯夭。
2鳍贾,每個(gè)key的后面需要加:,每個(gè):后面還需要加一個(gè)空格交洗!
3骑科,列表的短橫線后面需要有個(gè)空格。

兩個(gè)關(guān)鍵點(diǎn):

第一個(gè)是yml是支持中文內(nèi)容的构拳,properties想使用中文只能用unicode編碼

第二個(gè)是順序問題咆爽,properties是不保證加載順序的,yml有先后順序隐圾,實(shí)際用例比如springcloud的zuul網(wǎng)關(guān)路由配置伍掀,如果一個(gè)uri同時(shí)滿足兩個(gè)匹配規(guī)則掰茶,properties你是不知道它到底使用了哪個(gè)規(guī)則的暇藏,而yml則一定是使用了靠的那個(gè)路由規(guī)則

Java 的 Properties 加載屬性文件后是無法保證輸出的順序與文件中一致的,因?yàn)?Properties 是繼承自 Hashtable 濒蒋, key/value 都是直接存在 Hashtable 中的盐碱,而 Hashtable 是不保證進(jìn)出順序的。

總有時(shí)候會(huì)有關(guān)心順序一致的需求沪伙,恰如有 org.apache.commons.collections.OrderdMap(其實(shí)用 LinkedHashMap 就是保證順序) 一樣瓮顽,我們也想要有個(gè) OrderdProperties。

詳見: https://blog.csdn.net/qq1169091731/article/details/53012071

Spring Boot中application.properties和application.yml加載順序

使用@PropertySource注解加載自定義配置文件围橡,該注解無法加載yml配置文件暖混。使用@Value注解獲得文件中的參數(shù)值

application.properties和application.yml文件可以放在一下四個(gè)位置:

  • 外置,在相對于應(yīng)用程序運(yùn)行目錄的/congfig子目錄里翁授。
  • 外置拣播,在應(yīng)用程序運(yùn)行的目錄里
  • 內(nèi)置,在config包內(nèi)
  • 內(nèi)置收擦,在Classpath根目錄

同樣贮配,這個(gè)列表按照優(yōu)先級(jí)排序,也就是說塞赂,src/main/resources/config下application.properties覆蓋src/main/resources下application.properties中相同的屬性泪勒,如圖:
[圖片上傳失敗...(image-9f4435-1604553023059)]

image

此外,如果你在相同優(yōu)先級(jí)位置同時(shí)有application.properties和application.yml宴猾,那么application.properties里面的屬性就會(huì)覆蓋里application.yml的屬性

package com.example.webservice.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 *
 * ConfigurationProperties(prefix ="person") 將本類中的所有屬性和配置文件中的相關(guān)配置進(jìn)行綁定
 * prefix ="person  表示對哪個(gè)文件進(jìn)行綁定
 * Component 表示這是一個(gè)容器圆存, 只有在容器中  ConfigurationProperties 才能使用
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

     private String name;
     private Integer age;
     private boolean man;
     private Date birth;
     private Map<String,Object>map;
     private List<Object>list ;
     private Son son ;

.....省略get/set  以及toString 方法

}


package com.example.webservice.bean;

public class Son {

    private String name;
    private Integer age ;

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Son{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
}


properties文件綁定的寫法
#注釋方法 Ctrl + /
person.name=爸爸
person.age=45
person.man=true
person.birth=2019/8/8
person.map.k1=h1
person.map.k2=h2
person.list=a,1,son
person.son.name=兒子
person.son,age=20


yml 文件綁定的寫法:

person:
  name: 爸爸
  age: 25
  birth: 2018/2/8
  man: true
  list:
    - a
    - 2
    - son
  map: {key1:value1,key2:value2}
  son:
    name: 兒子
    age: 5測試類 : 在我們的test 文件夾下 :package com.example.webservice;import com.example.webservice.bean.Person;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)@SpringBootTestpublic class WebserviceApplicationTests {    @Autowired     Person person;    @Test    public void contextLoads() {   // 直接運(yùn)行這個(gè)方法 ,而不是運(yùn)行整個(gè)程序        System.out.println(person);        System.out.println("********************************************************");    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仇哆,一起剝皮案震驚了整個(gè)濱河市沦辙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌税产,老刑警劉巖怕轿,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偷崩,死亡現(xiàn)場離奇詭異,居然都是意外死亡撞羽,警方通過查閱死者的電腦和手機(jī)惨远,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汇陆,“玉大人沪哺,你說我怎么就攤上這事×诘欤” “怎么了笤喳?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碌宴。 經(jīng)常有香客問我杀狡,道長,這世上最難降的妖魔是什么贰镣? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任呜象,我火速辦了婚禮,結(jié)果婚禮上碑隆,老公的妹妹穿的比我還像新娘恭陡。我一直安慰自己,他們只是感情好上煤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布休玩。 她就那樣靜靜地躺著,像睡著了一般劫狠。 火紅的嫁衣襯著肌膚如雪拴疤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天嘉熊,我揣著相機(jī)與錄音遥赚,去河邊找鬼。 笑死阐肤,一個(gè)胖子當(dāng)著我的面吹牛凫佛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播孕惜,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼愧薛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了衫画?” 一聲冷哼從身側(cè)響起毫炉,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎削罩,沒想到半個(gè)月后瞄勾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體费奸,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年进陡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愿阐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趾疚,死狀恐怖缨历,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情糙麦,我是刑警寧澤辛孵,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站赡磅,受9級(jí)特大地震影響魄缚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仆邓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一鲜滩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧节值,春花似錦、人聲如沸榜聂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽须肆。三九已至匿乃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間豌汇,已是汗流浹背幢炸。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拒贱,地道東北人宛徊。 一個(gè)月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像逻澳,于是被迫代替她去往敵國和親闸天。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354