SpringBoot 新手入门(五)

一、SpringBoot的yml配置文件

(1)SpringBoot的配置文件常用的有2种类型,.properties和.yml。
默认情况下,SpringBoot会加载classpath或者classpath:/config下的application.properties
或者a pplication.yml文件。

.properties文件是我们常用的配置文件,.yml则是YAML文件,YAML是一种易阅读、易和脚本语言交互的用来表达资料序列的编程语言,这里简单说下语法
  (1)使用空格 Space 缩进分层,同层元素左对齐,不同层元素使用不同的空格数目缩进(不能使用 Tab,各系统 Tab对应的空格数目可能不同,导致层次混乱);
  (2)#表示注释;
  (3)破折号后面跟一个空格表示列表;
  (4)key和value之间用冒号和空格分隔。

environments:
    dev:
        url: http://dev.bar.com
        name: Developer Setup
    prod:
        url: http://foo.bar.com
        name: My Cool App

#yaml 的list集合
my:
   servers:
       - dev.bar.com
       - foo.bar.com

上述代码段是一个标准的yml文件内容,等价于如下properties配置

environments.dev.url=http://dev.bar.com
environments.dev.name=Developer Setup
environments.prod.url=http://foo.bar.com
environments.prod.name=My Cool App

my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com

SpringBoot通过YamlPropertiesFactoryBean 来加载application.yml文件,并通过YamlMapFactoryBean 将其转换成Map
  我们可以通过@Value或者@ConfigurationProperties注解来获取配置文件中的数据。例如有如下application.yml文件:

name:
    nameStr
age:
    11

#yaml 的list集合
my:
    servers:
       - dev.bar.com
       - foo.bar.com
@Configuration
public class MyConfiguration {
    // 通过@Value获取值
    @Value("${name}")
    private String name;

    @Value("${age}")
    private Integer age;

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
@Configuration
//通过@ConfigurationProperties获取值
@ConfigurationProperties(prefix="my")
public class MyConfig {

    private List<String> servers = new ArrayList<String>();

    public List<String> getServers() {
        return this.servers;
    }

}
@SpringBootApplication
@RestController
public class Application {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(Application.class);
        application.run(args);
    }


    @Autowired
    private MyConfiguration myConfiguration;

    @RequestMapping("/getMyConfiguration")
    public String getMyConfiguration() {
        return myConfiguration.getName() + ":" + myConfiguration.getAge();
    }

    @Autowired
    private MyConfig myConfig;

    @RequestMapping("/getMyConfig")
    public List<String> getMyConfig() {
        return myConfig.getServers();
    }
}

启动Application,在浏览器分别输入 http://localhost:8080/getMyConfiguration 和 http://localhost:8080/getMyConfig 可以得到配置的值。
  当使用@ConfigurationProperties获取配置值,SpringBoot还提供了一种宽松的绑定方式(@Value不支持该特性):

@ConfigurationProperties(prefix="person")
public class OwnerProperties {

    private String firstName;

    public String getFirstName() {
        return this.firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

}

则在配置文件中使用如下任意一种方式都能获取对应的配置值

person.firstName
person.first-name
person.first_name
PERSON_FIRST_NAME
发布了29 篇原创文章 · 获赞 4 · 访问量 858

猜你喜欢

转载自blog.csdn.net/hukehukehukehuke/article/details/104055665