yml语法规则 (5.spring boot配置文件注入@ConfigurationProperties)、配置文件处理器

applicationi.properties

application.yml   以数据为中心,比json xml更适合做配置文件

 

k: v           表示一对键值对
空格缩进控制层级关系,左对齐的一列数据都是同一层级

  

字面量:123  aaa字符串默认不用引号  true
    
""不转义,所以特殊字符比如换行生效
''转义,所以特殊字符当成普通字符无效

  

对象,map属性值
对象还是k: v

在下一行写
friends:
 lastname: zhangsan
 age: 20


行内写法:
friends: {lastname: zhangsan,age: 18}

  

数组List、Set,

pets:
 - cat
 - dog
 - pig


行内写法:
pets: [cat,dog,pig]

 

 




 

干活:

创建bean目录写一个person类,一个dog类

@ConfigurationProperties将配置文件中配置的每一个属性的值,映射到这个组件中

package com.tabctrlshift.springboot.bean;

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

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

/**
 * @ConfigurationProperties将配置文件中配置的每一个属性的值,映射到这个组件中
 * prefix = "person"配置文件中这个下面的所有属性进行一一映射
 */
//类中所有属性和配置文件中相关的配置进行绑定
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private boolean boos;
    private Date birth;

    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boos=" + boos +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Integer getAge() {
        return age;
    }

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

    public boolean isBoos() {
        return boos;
    }

    public void setBoos(boolean boos) {
        this.boos = boos;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }
}

  

package com.tabctrlshift.springboot.bean;

public class Dog {
    private String name;
    private String age;

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

    public String getName() {
        return name;
    }

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

    public String getAge() {
        return age;
    }

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

  

 application.yml写入配置

server:
  port: 8081

person:
  lastName: zhangsan
  age: 18
  boss: false
  birth: 2017/12/12
  maps: {k1: v1,k2: 12}
  lists:
    - list
    - zhaoliu
  dog:
    name: 小狗
    age: 2

  

 

 错误提示:

添加相关的依赖就有元数据提示了

 

 

 

		<!--导入配置文件处理器,配置文件绑定就会有输入提示-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

  

 

 配置好了重新启动main

@Component 添加到容器中

下面开始测试




package com.tabctrlshift.springboot;

import com.tabctrlshift.springboot.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;

/**
 * spring boot单元测试
 *
 * 可以在测试期间类似编码一样进行自动注入等容器的功能
 */
//用spring的驱动器来跑,而不是junit
@RunWith(SpringRunner.class)
//springboot的单元测试
@SpringBootTest
public class SpringBoot02ConfigApplicationTests {

	@Autowired
	Person person;

	@Test
//	在这运行
	public void contextLoads() {
//		简写so就可以联想出来
		System.out.println(person);
	}

}

  

 

 运行测试,控制台打印出来ok

Person{lastName='zhangsan', age=18, boos=false, birth=Tue Dec 12 00:00:00 CST 2017, maps={k1=v1, k2=12}, lists=[list, zhaoliu], dog=Dog{name='小狗', age='2'}}

  

配置文件、javabean,导入配置文件处理器这样编写配置就有提示了

@ConfigurationProperties

同样如果用.properties文件也会有提示

有中文 文件编码也要改一下

 

#server.port=8081
#配置文件默认utf-8
person.age=18
person.birth=2017/12/12
person.boos=false
person.last-name=张三
person.lists=a,b,c
person.maps.k1=v1
person.maps.k2=v2
person.maps.k3=v3
person.dog.name=dog
person.dog.age=15

  上面是application.properties代码例子

posted @ 2018-05-22 07:53  miaomiaotab  阅读(2080)  评论(0编辑  收藏  举报