Spring Boot 全局配置文件applicaion.properties/applicaion.yml

YAML 简介
Spring Boot 使用一个全局配置文件来对一些默认配置值进行修改,比如Tomcat端口等
配置文件名字约定为“application.properties”或者“application.yml”
配置文件放必须放在src/main/resources目录或者类路径/config下
yml 全称 YAML(YAML Ain't Markup Language),以数据为中心,比 json、xml 等更适合做配置文件
语法规范参考网址:http://www.yaml.org
如下所示使用"application.yml"来修改内置的Tomcat的端口

YAML 语法

  • k:(空格)v:表示一对键值对,注意必须有空格;
  • 使用缩进表示层级关系,缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • 大小写敏感
server:
  port: 8082

数据类型
YAML 支持三种数据结构
对象:键值对的集合,常用写法
数组:一组按次序排列的值
字面量:单个的、不可再分的值
复合结构,以上三种写法的任意组合都可以
对象( Map )
{k: v}:在下一行来写对象的属性和值的关系;注意缩进
冒号后面跟空格来分开键值;如下frined表示对象,latName与age表示属性

friend:
  lastName: zhangsan
  age: 20
  • {k: v}是行内写法,如下frined表示对象,latName与age表示属性
friend: {lastName: zhangsan,age: 18}

字面量
k: v:字面亮直接写,值(v)可以是“数字”、“字符串”、“布尔”、“日期”
字符串默认不使用单引号或者双引号
""(双引号)不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思,,如:name: "zhangsan \n lisi":输出的结果是:zhangsan 换行 lisi
''(单引号)会转义字符串中的特殊字符,特殊字符最终只是一个普通的字符串数据,如:name: ‘zhangsan \n lisi’:输出结果为:zhangsan \n lisi
数组(List、Set)
“- 值”表示数组中的一个元素,注意缩进 和空格

Animal:
 ‐ cat
 ‐ dog
 ‐ pig
  • 行内写法
Animal: [cat,dog,pig]

YAML 文件 值注入

Java Bean

/**
 * 狗 实体类-----------普通Java Bean
 */
public class Dog {
    private Integer id;
    private String name;
    private Integer age;

    public Integer getAge() {
        return age;
    }

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

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Dog{" +
                "age=" + age +
                ", id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
/**
 * 用户···实体
 *
 * @ConfigurationProperties 表示 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 * prefix = "user" 表示 将配置文件中key为user的下面所有的属性与本类属性进行一一映射注入值,如果配置文件中
 * 不存在"user"的key,则不会为POJO注入值,属性值仍然为默认值
 * <p/>
 * @ConfigurationProperties (prefix = "user") 默认从全局配置文件中获取值然后进行注入
 * @Component 将本来标识为一个Spring 组件,因为只有是容器中的组件,容器才会为@ConfigurationProperties提供此注入功能
 */
@Component
@ConfigurationProperties(prefix = "user")
public class User {
    private Integer id;
    private String name;
    private Integer age;
    private Date birthday;
    private List<String> colorList;
    private Map<String, String> cityMap;
    private Dog dog;

    public Integer getAge() {
        return age;
    }

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

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public Map<String, String> getCityMap() {
        return cityMap;
    }

    public void setCityMap(Map<String, String> cityMap) {
        this.cityMap = cityMap;
    }

    public List<String> getColorList() {
        return colorList;
    }

    public void setColorList(List<String> colorList) {
        this.colorList = colorList;
    }

    public Dog getDog() {
        return dog;
    }

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

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "age=" + age +
                ", id=" + id +
                ", name='" + name + '\'' +
                ", birthday=" + birthday +
                ", colorList=" + colorList +
                ", cityMap=" + cityMap +
                ", dog=" + dog +
                '}';
    }
}

写了上面的“@ConfigurationProperties(prefix = "user")”注解后,如下会提示“Spring Boot配置文件注解处理器没有找到”,这时可以点击右上角的提示“Opne Documention...”进入官方文档拷贝依赖放入到"pom.xml"文件中即可。

  • 拷贝的就是如下所示,粘贴之后刷新Maven依赖就下载好了,此时以后写yaml文件时就会有提示了,会方便很多。
<!--导入配置文件处理器,配置文件属性值与Java Bean进行绑定时就会有提示-->
<dependency>
    <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

application. yml

文件内容如下,key值user要与User实体类上的"@ConfigurationProperties(prefix = "user")"对应
配置文件属性名要与实体类User中的一致
yml文件编写时要注意缩进只能是空格,且key:与value必须要用空格隔开
下面基本涵盖了YAML所有的数据类型

server:
   port: 8081
user:
   id: 110
   lastName: 张三
   age: 110
   birthday: 2018/07/11
   colorList:
     - red
     - yellow
     - green
   cityMap: {mapK1: mapV1,mapK2: mapV2}
   dog:
     id: 9527
     name: 哮天犬
     age: 100

测试类 运行测试

/**
 * SpringBoot单元测试
 * 可以在测试期间很方便的类似编码一样进行自动注入等容器的功能
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloWorldQuickApplicationTests {

    /**
     * 因为User类使用了@Component注解,就是Spring一个组件,交由了Spring容器注入值
     * 所以使用@Autowired或者@Resource,DI注入在取值即可
     */
    @Resource
    private User user;

    @Test
    public void contextLoads() {
        System.out.println("------------------------------********************--------------------------------------------");
        System.out.println("======================" + user);
    }
}
  • 运行上面的测试类之后,就会看到如下输出,配置文件注入值成功
  • 注意当User的"lastName"改为"name"时,注入的时候会自动变成"Administrator",而导致自己的值无法注入,可能name是关键字吧

application. properties 文件
Spring Boot 约定“application.properties”与“application.yml”都是作为默认的配置文件,放在src/main/resources目录或者类路径/config下
“application.properties”与“application.yml” 功能完全一样,只是写法上略有不同。
properties 文件注入值
现在仍然以上面的需求为例,为User实体注入值,使用application.properties来配置
写法很类似Json的取值写法,都是以"."来递进的

server.port=8081

user.id=111
user.lastName=张无忌
user.age=120
user.birthday=2018/07/11
user.colorList=red,yellow,green,blacnk
user.cityMap.mapK1=mapV1
user.cityMap.mapK2=mapV2
user.dog.id=7523
user.dog.name=狗不理
user.dog.age=3
  • 对应的yml写法如下:
server:
   port: 8081
user:
   id: 110
   lastName: 张三
   age: 110
   birthday: 2018/07/11
   colorList:
     - red
     - yellow
     - green
   cityMap: {mapK1: mapV1,mapK2: mapV2}
   dog:
     id: 9527
     name: 哮天犬
     age: 100

乱码处理

  • *.properties文件中含有中文时,IDEA设置的UTF-8仍然会乱码,需要勾选后面的"本地编码转为ASCII码"即可解决

  • 注意"File Encodings"设置完成后,如果.properties文件中之前已经存在中文了,则需要删除重写

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值