可以不用配置文件吗
完全可以不用配置文件,直接启动就行,参数都是默认的。
就算用配置文件,这个配置文件跟Spring中那种繁琐的配置文件也完全不是一个概念。
SpringBoot的配置文件非常简单!今天就来聊聊。
配置文件格式
SpringBoot支持两种配置文件.properties
配置文件和.yml
配置文件,虽然官方号称是推荐.yml
配置文件,但是我实际看到的还是以.properties
配置文件居多点。
这两种格式其实没有本质区别.properties
文件使用.
分割语义,而.yml
文件使用缩进
分割意义(有点像Python哈哈)。
所以我们只要掌握了一种配置,就可以翻译为另一种配置。例如配置项目启动端口。
# .properties文件配置方法
server.port=1007 #启动端口设置为1007
# .yml配置方法
server:
port: 1007 #务必注意冒号后面要有个空格 不然不生效哈
注意,SpringBoot项目启动时加载的配置文件名默认为application.properties
或application.yml
,不建议老铁你同时建立这两个文件,纯属闲的没事找事。
TIPS SpringBoot2.x中可以使用
server.servlet.context-path=/xxx
配置项目的访问路径,而SpringBoot1.x中配置方法为server.context-path=/xxx
,不知道为啥搞得不一样了,不向前兼容是很烦的一件事!
自定义配置项
可以自定义一些配置项,然后在项目中直接使用,例如我们通常会习惯将微信公众号相关的参数放到配置文件中便于修改,而不是写死到代码中,每次修改还得重新编译程序。
# 配置端口
server.port=1007
# 公众号的appid
wxmp.appid=111
# 公众号的secret
wxmp.secret=222
然后注入到组件中,这样容器在启动时就可以将配置内容注入组件。
/**
* 微信公众号参数
*/
@Component//注册为组件
public class WxMpParam {
@Value("${wxmp.appid}")//注入wxmp.appid配置项
private String appid;
@Value("${wxmp.secret}")//注入wxmp.secret配置项
private String secret;
}
指定对象绑定配置
如下同样生效,注意@Data不能省略
/**
* 微信公众号参数
*/
@Component//注册为组件
@EnableConfigurationProperties//启用配置绑定组件功能
@ConfigurationProperties(prefix="wxmp")//指定组件绑定的前缀
@Data//需要开启get/set,以便注入
public class WxMpParam {
private String appid;//自动匹配到wxmp.appid
private String secret;//自动匹配到wxmp.secret
}
在配置文件中使用随机数
配置文件中使用随机数也是比较常见的场景,尤其启动多个客户端时,希望指定一个启动端口的范围,例如10-20,可配置如下:
# 配置端口为1-20间的随机数
server.port=${random.int[10,20]}
这样我可以连续启动四个客户端,启动端口分别为:12、13、17、19,可见是随机的,而且在我指定的范围内波动。
自定义配置文件
有时候参数太多,都放到一个配置文件中太乱了,我们会希望将配置分到不同文件中,然后每个文件保存不同配置。
例如上面微信公众号配置,我们单独摘出来,放到wxmp.properties中。
# wxmp.properties
# 公众号的appid
wxmp.appid=111
# 公众号的secret
wxmp.secret=222
让我们在组件注入时代码如下:
/**
* 微信公众号参数
*/
@Component // 注册为组件
@PropertySource(value = "classpath:wxmp.properties", encoding = "utf-8") // 指定配置文件及编码
public class WxMpParam {
@Value("${wxmp.appid}")
private String appid;
@Value("${wxmp.secret}")
private String secret;
}
当然我们也可以结合绑定对象的语法,修改如下:
/**
* 微信公众号参数
*/
@Component//注册为组件
@EnableConfigurationProperties//启用配置绑定组件功能
@ConfigurationProperties(prefix="wxmp")//指定组件绑定的前缀
@PropertySource(value = "classpath:wxmp.properties", encoding = "utf-8") // 指定配置文件及编码
@Data//需要开启get/set,以便注入
public class WxMpParam {
private String appid;//自动匹配到wxmp.appid
private String secret;//自动匹配到wxmp.secret
}
引用配置项
Spring Boot配置项是可以引用其他配置项的值的,这个稍微提一下,例如:
# wxmp.properties
# 公众号的appid
wxmp.appid=111
# 公众号的secret,值为111222
wxmp.secret=${wxmp.appid}222
总结
配置少,就直接在application.properties写写就完了。
配置多,就分出几个配置文件来。
如果一个配置文件中配置项很多,也可以考虑让配置绑定对象,免得重复写前缀。
SpringBoot提供了足够灵活的配置文件使用机制,让我们灵活运用!