配置文件详解
SpringBoot中,配置文件分为两种:
- application.properties
- application.yml
本节主要围绕.properties来讲,yml的用法实际相似。
properties
这个文件就跟我们在spring项目中一样,value(值)对应的key(键)要全部写全。
就像下面描述的那样,定义了书名、作者、年龄。
project.book=程序员的自我修养
project.author=清风吹我心
project.age=25
那么如何在SpringBoot中获取配置文件中的值呢?
首先创建一个Controller
package com.qfcwx.springbootproperties.controller;
import com.qfcwx.springbootproperties.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName: PropertisController
* @Author: 清风一阵吹我心
* @Description: TODO
* @Date: 2019/3/9 15:41
* @Version 1.0
**/
@RestController
public class PropertiesController {
@Value("${project.book}")
private String book;
@Value("${project.author}")
private String author;
@Value("${project.age}")
private int age;
@GetMapping(value = "/book")
public String bookInfo() {
return "《"+book + "》这本书的作者是:" + author + "," + age + "岁啦!";
}
}
@Value这个注解可以根据键读取到对应的值。启动项目,访问:http://localhost:8080/book
可以看到,成功的取到了值。
当然,这是取出默认的application.properties文件中的值。那么,想取别的配置文件中的值,该怎么做呢?
这里就将配置文件与实体类进行映射。新建一个配置文件。
customer.properties
user.author=张三
user.age=18
user.sex=男
user.career=学生
然后,新建一个bean对象
User
package com.qfcwx.springbootproperties.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
/**
* @ClassName: User
* @Author: 清风一阵吹我心
* @Description: TODO
* @Date: 2019/3/9 15:53
* @Version 1.0
**/
@Component
@PropertySource(value = "classpath:customer.properties")
@ConfigurationProperties(prefix = "user")
public class User {
private String author;
private int age;
private String sex;
private String career;
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getCareer() {
return career;
}
public void setCareer(String career) {
this.career = career;
}
@Override
public String toString() {
return "User{" +
"author='" + author + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", career='" + career + '\'' +
'}';
}
}
@Component:把普通pojo实例化到spring容器中。
@PropertySource:指定配置文件位置。
@ConfigurationProperties:设置相关属性。
可以看到配置文件中的大部分键,都以user开头,所以,可以给实体类配置有一个前缀。如果属性名称和配置文件里面的key一一对应,就不用加@Value。如果不一样,就要加@value("${XXX}")
基本上配置就完成了,然后修改controller类。
package com.qfcwx.springbootproperties.controller;
import com.qfcwx.springbootproperties.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName: PropertisController
* @Author: 清风一阵吹我心
* @Description: TODO
* @Date: 2019/3/9 15:41
* @Version 1.0
**/
@RestController
public class PropertiesController {
@Autowired
private User user;
@GetMapping(value = "/user")
public User userInfo(){
System.out.println(user);
return user;
}
}
因为把User对象加入到了Spring的IOC容器中,所以使用@Autowired进行注入即可。
启动项目,访问: http://localhost:8080/user
成功的显示了返回的结果。基本上properties的讲解就完了。
yml
YAML是“YAML不是一种标记语言”的外语缩写 ;但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。
它是类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。
适用场景:
- 脚本语言:由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用。Ruby,Java,Perl,Python,PHP,OCaml,JavaScript,Go 除了Java 和 Go,其他都是脚本语言。
- 序列化:YAML比较适合做序列化。因为它是宿主语言数据类型直转的。
- 配置文件:YAML做配置文件也不错。写YAML要比写XML快得多,并且比ini文档功能更强。
优点:
- 方便使用。
- 层级显示,减少配置文件的字数。
- 分类头使得yml文件更易读。
下面附上一张yml格式的配置文件,至于值得读取,和properties一样,就不讲解了。
愿你学会在孤独中,与自己交流,听自己说话,从而学会深刻。