您的位置:首页 > 编程语言 > Java开发

SpringBoot 项目属性的配置和使用

2017-04-08 15:58 741 查看

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: