SpringBoot 项目属性的配置和使用

SpringBoot 项目属性的配置和使用

首先有两种配置文件,分别为:.properties或.yml。一般情况下,项目自动生成的是以.properties后缀的配置文件。

一般.properties形式的配置文件的格式如下:

    server.port=8080
    server.context-path=/hello

而.yml形式的配置未见的格式如下:

    server:
      port: 8080
      context-path: /hello

从上面两种形式可以看到:当有前缀的情况下,使用.yml格式的配置文件更简单,因此,更倾向于推荐使用.yml。

不过值得注意的是:使用.yml时,属性名的值和冒号中间必须有空格,如port: 8080正确,port:8080就是错的。值得庆幸的是一般的IDE对此有良好的支持,例如:IDEA。

通过@Value(“${name}”)形式来使用属性

上面介绍了两种属性配置文件,这节就来介绍下如何在程序中使用配置文件中定义的属性。

最简单的方式就是使用@Value(“${name}”)形式来使用属性。

例如:在.yml文件中定义了这样的一个属性:

name: wojiushimogui

则在SpringBoot控制器中我们使用该name属性的具体代码如下:

package com.wrh;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by wuranghao on 2017/4/7.
 */
@RestController
public class HelloController {

    @Value("${name}")
    private String name;
    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(){
        return "hello "+name ;
    }
}


这样,当我们启动SpringBoot这个项目时,在浏览器中输入:local:8080/hello,可以看到如下的结果:

当然,当属性特别多时,如果每个属性上都使用一个@Value注解来使用配置文件中的属性也比较蛋疼哈,因此,就有必要将配置文件中的属性映射为一个类,然后直接使用类即可。下面就来介绍下@ConfigurationProperties注解。

@ConfigurationProperties讲解

先假设.yml中的内容如下:

person:
  name: wojiushimogui
  age: 18

我们为其映射的类为:

package com.wrh;

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

/**
 * Created by wuranghao on 2017/4/8.
 */
@Component
@ConfigurationProperties(prefix = "person")//注意prefix为person,与配置文件一致。
public class Person {
    private  String name;
    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;
    }
}

这样就直接在HelloController中直接使用Person这个类即可。如下:

/**
 * Created by wuranghao on 2017/4/7.
 */
@RestController
public class HelloController {
    @Autowired
    private Person person;
    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(){
        return "hello "+person.getName();
    }
}

@Value(“#{a.b}”)的用法

不仅可以使用@Value(“${name}”) 这样,还可以使用类似于 @Value(“#{a.b}”)的用法。下面看一个例子。

第一步:配置文件中的内容如下;

 name: wojiushimogui
 age: 18

当然,也可以在配置文件中利用已有的属性来构建新的属性值。

例如:

information: "name:${name},age:${age}"

第二步:新建一个Person类

package com.wrh;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * Created by wuranghao on 2017/4/8.
 */
@Component
public class Person {
    @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;
    }
}

第三步:在HelloController类中的内容修改如下:

package com.wrh;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by wuranghao on 2017/4/7.
 */
@RestController
public class HelloController {

    @Value("${name}")
    private String name;
    @Value("#{person.age}")//注意
    private Integer age;
    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(){
        return "hello "+name + age;
    }
}

运行此SpringBoot程序的结果如下:

多环境下的配置

多环境下的配置,即不同的环境使用不同的配置文件。

具体做法如下:

1、不同环境的配置设置一个配置文件,例如:dev环境下的配置配置在application-dev.yml中;prod环境下的配置配置在application-prod.yml中。

例如,

在application-dev.yml中的内容为:profile: dev
在application-prod.yml中的内容为:profile: prod

2、在application.yml中指定使用哪一个文件。

例如,想指定dev这个配置文件,则在applicatin.yml配置文件中设置内如下:

spring:
  profiles:
    active: dev

在dev环境下使用如下的代码测试:

@RestController
public class HelloController {
    @Value("${profile}")
    private String profile;
    @RequestMapping(value="/hello",method= RequestMethod.GET)
    public String sayHello(){
        return profile;
    }
}

在浏览器中输入:local:8080/hello看到的结果为:dev。

你可能感兴趣的:(SpringBoot,springboot,Value,配置文件)