SpringBoot 项目属性的配置和使用

来源:互联网 发布:mac怎么iphone铃声 编辑:程序博客网 时间:2024/06/16 02:26

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. */@RestControllerpublic 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. */@RestControllerpublic 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. */@Componentpublic 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. */@RestControllerpublic 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环境下使用如下的代码测试:

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

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

0 0
原创粉丝点击