Spring Boot允许您外部化配置,以便您可以在不同的环境中使用相同的应用程序代码;可以轻松访问属性文件中定义的属性。您可以使用属性文件,YAML文件,环境变量和命令行参数来外部化配置。属性值可以通过直接注射到你的bean @Value注释,通过Spring的访问Environment抽象,或者通过@ConfigurationProperties注解绑定到对象上。
Spring Boot 配置属性文件支持两种格式,一种是 .properties文件,另一种是.yml文件
我们后续的学习主要是这两种文件格式的配置方法,本节主要讲.properties文件的配置。
- application.properties配置自定义属性
@Value
在resources目录下新建application.properties
设置属性name=testnamevalue
我们如何在程序中获取这个属性值呢?
创建类MyApplication,并执行代码后,在浏览器输入http://localhost:8080/
具体代码如下:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@EnableAutoConfiguration
public class MyApplication {
@Value("${name}")
String name;
@RequestMapping("/")
String home() {
System.out.println(name);
return name;
}
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
我们可以看到在类中定义了一个name属性,在这个属性上增加了@value注解,当我们运行程序后,在浏览器中我们发现取到了name属性值testname。因此我们可以发现在Sring Boot程序中获取属性文件的值可以通过@Value注解获取。
基于对象方式的读取配置文件-@ConfigurationProperties
在我们使用@value时会发现,有时候会很麻烦,尤其是在多个属性或者数据本质上是分层的情况下。
例如下面这种配置
jdbc.name=username
jdbc.password=123456
jdbc.address=127.0.0.1
创建实体装载相应的属性值
package org.learn.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix="jdbc")
public class JdbcBean {
private String name;
private String password;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
创建Controller在程序中获取上面的类
package org.learn.controller;
import org.learn.bean.JdbcBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class JdbcController {
@Autowired
JdbcBean jdbcBean;
@RequestMapping("/")
String home() {
String str = jdbcBean.getName()+"_"+jdbcBean.getPassword()+"_"+jdbcBean.getAddress();
return str;
}
}
执行Main方法,启动程序后输入 http://localhost:8080/
我们可以看到浏览器输出了返回的数据。已经从配置文件中获取到了值。
- application.properties配置常用配置
在application.properties除了可以配置我们自定义的属性外,还可以配置一些系统的基本配置项。例如:
server.port=8888 :表示配置端口
server.context-path 表示自定义上下文路径
server.tomcat.uri-encoding = UTF-8 表示用于解码URI的字符编码。
spring.http.encoding.charset = UTF-8 #HTTP请求和响应的字符集。如果未明确设置,则添加到“Content-Type”头。
此时我们再次启动程序后,请求的地址端口不再是8080,而是8888了。具体其他相关常用配置可自行百度。