Spring Boot的优点是不需要太多的配置即可使用,但是在实际使用过程中,我们往往需要根据项目的情况来进行一些少量的配置。
一、配置文件分类
Spring Boot的配置文件主要分为两类:properties 和 YAML(.yml)。
.properties 格式的配置文件如下:
#properties格式
my.name=luhao
my.server.port=8080
my.servers[0]=dev.com
my.servers[1]=tes.com
.yml 格式的配置文件如下:
#YAML格式
my:
name: luhao
server:
port: 8080
servers:
- dev.com
- tes.com
properties格式需要写出完整的层级结构,较为复杂;而yml格式类似于JSON,可以很直观的看到层级结构。
Tips:短横杠“-”代表的是数组元素。
注意:
1.使用.yml时,属性名的值和冒号中间必须有空格,如name: luhao正确,name:luhao就是错的。
2.使用.yml时,层级是根据缩进来判断的,当出现错误时,可以检查下是否格式不正确。
二、自定义属性加载
可以在配置文件中定义一些属性,当需要使用到配置文件中的属性时,在代码中可以通过 @Value("${自定义属性}") 引用。
@Controller
public class HelloWorld {
@Value("${my.name}")
private String name;
@Value("${my.servers[0]}")
private String servers;
@ResponseBody
@RequestMapping("/")
public String index(Model model) {
return name + " : " + servers;
}
}
启动应用,输入http://localhost:8080,显示效果如下:
三、实体类使用
当需要在实体类加载自定义的属性时,有以下两种方式进行加载。
方式一:
@Component
public class MyInfo {
@Value("${my.name}")
private String name;
@Value("${my.servers[0]}")
private String servers;
//省略get和set方法
}
方式二:
@Component
@ConfigurationProperties(prefix="my")
public class MyInfo {
private String name;
private String [] servers;
// 省略getter和setter
}
在别的类使用时只需要引入即可,引入以及调用代码如下。
@Controller
public class HelloWorld {
@Autowired
private MyInfo myInfo;
@ResponseBody
@RequestMapping("/")
public String index(Model model) {
return myInfo.getName() + " : " + myInfo.getServers();
}
}
启动应用,输入http://localhost:8080,显示效果如下:
注意:
当使用方式二进行配置的时候,可能会显示如下警告: Spring Boot Configuration Annotation Processor not configured
解决方法:在pmo.xml里添加如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
该问题不影响系统正常启动, 它的意思是“Spring Boot配置注解执行器没有配置”,配置了注解执行器以后,如果先在类中定义了这个字段,在配置文件去对定义这个字段时可以自动弹出提示。
四、多开发配置文件
当开发需要配置的属性较多或者需要按模块进行配置时,可以放在自定义的其他配置文件当中,比如新定义一个配置文件,course.properties,当需要用到这个配置文件的内容时,只需要加上一行注解**@PropertySource(value = “配置文件路径”)**即可。
course.properties:
course.name=English
course.time=45min
CourseInfo.java
@Component
@PropertySource(value = "classpath:course.properties")
@ConfigurationProperties(prefix="course")
public class CourseInfo {
private String name;
private String time;
// 省略getter和setter
}
HelloWorld.java
@Controller
public class HelloWorld {
@Autowired
private CourseInfo courseInfo;
@ResponseBody
@RequestMapping("/")
public String index(Model model) {
return courseInfo.getName() + " : " + courseInfo.getTime();
}
}
启动应用,输入http://localhost:8080,显示效果如下:
五、多环境配置文件
通常我们开发的应用会被放在不同的环境上去运行,每个环境的配置也不相同,这时候可以定义不同的环境配置文件,用的时候只需要更改 application.yml/ application. properties主要配置文件就可以了。
自定义环境配置文件格式:: application-{profile}.properties, 其中{profile}对应你的环境标识,例如:
- application-test.properties:测试环境
- application-dev.properties:开发环境
- application-prod.properties:生产环境
使用时在主配置文件application.yml中添加
spring:
profiles:
active: dev
application-dev.yml:
server:
port: 8082
此时重新启动应用发现端口是8082(默认8080)