在前文中,构建第一个项目时,我们有介绍到,目录底下有一个application.properties属性配置文件,它的作用是什么呢?
我们先简单的写一个简单的配置:
server.port=8081
server.context-path=/csdn
如此两行字加在文件中,便可以改变服务器的端口号,以及命名空间,十分的方便,但是为了让它更加方便,我们通常换为yml文件,加在原resource目录下,同样的配置,格式如下:
server:
port: 8081
context-path: /csdn
是不是变得更加的简单易读了呢?需要注意的是冒号后一定要加空格,否则无法被读取。
除此之外,属性文件还可以写一些属性变量,提供给项目使用。
application.yml配置文件内容如下:
server:
servlet:
context-path: /csdn
port: 8081
arg: I am
age: 56
controller类的内容如下:
package com.example.first;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Hello {
@Value("${arg}")
private String arg;
@Value("${age}")
private Integer age;
@RequestMapping(value = "hello")
public String hello()
{
return "Hello,SpringBoot!"+arg+age;
}
}
注:@value()中需要加类似el表达式的美元符号,否则就是取引号中的String值,而不是配置文件中的属性,亲测。重启服务器后效果如下:
同样的,除了在类中属性注入,还可以在属性文件中直接调用属性值,调用方法同样是美元符号,代码如下:
server:
servlet:
context-path: /csdn
port: 8081
arg: I am
age: 56
content: "arg:${arg},age:${age}"
package com.example.first;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Hello {
@Value("${arg}")
private String arg;
@Value("${age}")
private int age;
@Value("${content}")
private String content;
@RequestMapping(value = "hello")
public String hello()
{
return content;
}
}
运行结果:
server:
servlet:
context-path: /csdn
port: 8081
boy:
arg: I am
age: 56
再写一个实体类,代码如下:package com.example.first;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix ="boy" )
public class Boy {
private int age;
private String arg;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getArg() {
return arg;
}
public void setArg(String arg) {
this.arg = arg;
}
}
该类写了一个@ConfigurationProperties(prefix="boy")注解,将属性的前缀加在上面,并用组件注解注册了一个bean,再看看Hello.java中的内容:package com.example.first;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.naming.Name;
@RestController
public class Hello {
@Autowired
private Boy boy;
@RequestMapping(value = "hello")
public String hello()
{
return boy.getArg()+boy.getAge();
}
}
将Boy实体类注入,便可以使用了,截图如下:最后的,全文中我们至始自终只使用着一个配置文件,就是application.yml,那么如何使用其他命名的配置文件呢?使用多个配置文件又有怎么样的好处呢?有些时候在不同的环境下我们需要不同的参数配置,如开发环境和实际运行环境,此时,我们需要编写多个配置文件。
我们先编写两个配置文件,命名分别为application-dev.yml,application-active.yml,前后者的代码分别是:
server:
servlet:
context-path: /csdn
port: 8081
boy:
arg: I am
age: 56
server:
servlet:
context-path: /csdn
port: 8081
boy:
arg: I am
age: 100
再保留原配置文件,改代码如下:spring:
profiles:
active: dev
此时的测试结果如下,表示调用的是开发环境的配置文件:
再将参数改为active,得到的结果为: