Spring Boot允许多种配置来源,官网是这样说的:
Spring Boot使用一种非常特殊的PropertySource顺序,旨在允许合理地覆盖值。按以下顺序考虑属性(优先级从高到低):
事实上,这个地方还少了一个,那就是配置中心,配置中心的优先级是最高的,还可以动态刷新,可以参考《SpringCloud技术指南系列(八)配置管理之Consul配置中心》配置中心的使用。
而且,我们常用的,一般有命令行参数、application-{profile}.properties和application.properties。自定义配置文件用的也不多,但是还是有人用的。
本篇着重讲述下常用的配置方式。
默认情况下,SpringApplication将任何命令行选项参数(即,以--开头的参数,如--server.port=9000)转化为property,并将它们添加到spring Environment。如前所述,命令行属性始终优先于其他属性源。
如果您不希望将命令行属性添加到Environment,则可以使用禁用它们SpringApplication.setAddCommandLineProperties(false)。
SpringApplication从application.properties以下位置的文件加载属性并将它们添加到Spring Environment:(优先级从高往低)
如果你不喜欢properties文件,可以使用YAML替代properties文件,加载顺序什么都是一样的,只不过写法不一样。
下面是两种写法的不同:
properties文件:
server.port=8858
spring.profiles.active=loc
yaml文件
server:
port: 8812
spring:
profiles:
active: loc
yaml文件看起来简洁明了,properties文件看起来一坨一坨的,但是我更喜欢properties文件,因为yaml文件对语法要求严格,tab键和空格键入的内容都不一样,很容易出错。
这种配置方法很少使用,可以说基本上没人用。
如果您不喜欢application.properties配置文件名,可以通过指定spring.config.name环境属性切换到另一个文件名。您还可以使用spring.config.location属性(以逗号分隔的目录位置或文件路径列表)来引用显式位置。spring.config.additional-location来指定额外配置文件。
spring.config.name的作用就是给application.properties换个名。
spring.config.location就是指定了加载配置文件的路径。就是不再从上面说的那个路径取配置文件。
spring.config.additional-location就是指定了额外配置文件的加载路径。除了在上面的在默认位置搜索配置文件,还搜索这个配置指定的位置的配置文件。而且优先级最高。
这三个配置都不能写在应用里,因为它是在应用启动前就确定的,需要在环境变量或者命令行参数确定。
如果我们在application.properties中写入了太多配置,想用其他配置文件来写配置时,就需要考虑下如何加载这些配置文件。
指定配置文件加载,就是指application-{profile}.properties和YAML变体 这种形式。
一直以来,我一直对这种形式存在误解,以为它只能区分环境,后来才发现,自己错了,这个只是纯粹的指向新的配置文件,你指了哪个,哪个就能加载。下面说下它分别怎么用。
区分环境:
区分应用:
自定义配置文件,就是定义的配置文件命名规范不再遵循Spring boot的要求,自由加载。需要使用@PropertySource注解加载配置文件。
user.properties:
user.username=cff
user.realName=大爷
user.mobile=23333
hello.message=sssssssssssssssssssaasa
代码示例:
package cn.pomit.springbootwork.consulclient.service;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@ConfigurationProperties(prefix="user")
@PropertySource("classpath:user.properties")
public class UserConfig {
private String userName;
private String realName;
private Integer mobile;
private String message;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public Integer getMobile() {
return mobile;
}
public void setMobile(Integer mobile) {
this.mobile = mobile;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String toString() {
return "UserConfig [userName=" + userName + ", realName=" + realName + ", mobile=" + mobile + ", message="
+ message + "]";
}
}
这样就可以直接使用user.properties配置文件中的配置,这里有注意事项:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。