注:案例工程使用的spring boot 版本为 2.1.2.RELEASE,Java 版本为 1.8
熟悉spring boot
的人肯定对 application.yml
或者 application.properties
配置文件很眼熟(因为个人喜好yaml方式,所以以下示例选用application.yml),因为spring boot
有着约定大于配置的特性,所以当其默认的配置不是我们需要的时候,就可以在工程的resource
目录下找到application.yml
进行相关配置,然后启动程序,这时spring boot
便会按照新的配置去运行。
例如 springboot
默认启动端口时8080
,如果我们的机器8080
端口已被使用,那么就要配置一个未被使用的端口,这是我们只要在application.yml
中填写如下配置:
1 | server: |
然后启动程序……
1 | [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 18080 (http) with context path '' |
通过控制台日志我们可以发现,此时spring boot
程序的端口已被修改为18080
。
这种开发方式在spring boot
中随处可见,比如如上所示的设置端口,或者如下所示的开启spring-cloud-gateway
通过注册中心自动创建路由,只需要进行如下配置即可:
1 | spring: |
而我们也可以模仿这种开发方式,让我们的程序更加灵活。所以本篇博客将讲述如何在 springboot 2.x
中读取配置文件。
读取application.yml
1. @Value
在spring boot 2.x
中,如果我们需要读取配置文件,如下面这种形式的配置,
1 | bfh: |
可以通过 @Value
注解来实现,如下:
1 | @Value("${bfh.name}") |
获取配置:curl -X GET "http://127.0.0.1:18080/getValueOfName
2. @ConfigurationProperties
@Value
注解虽然好用,但是不支持集合,IDEA 也不能做到智能提示,不管是造轮子,还是平时项目开发都建议使用 @ConfigurationProperties
注解,这样较为规范,接下来将介绍如何使用。
1 | @Data |
注:其中属性名要对应配置文件中的属性,比如这里面的
name
属性,对应配置文件中的bfh.name
如果除去注解不看的话,那么这只是一个普通的简单Java类,首先我们使用 @ConfigurationProperties(prefix = "bfh")
来读取 application.yml
中前缀为 bfh
的配置,使用lombok
的 @Data
来提供必要的 getter
setter
方法,最后使用 @Component
将其注入 spring
容器。
我们在 application.yml
添加一些配置数据:
1 | bfh: |
在我们需要读取配置文件的地方注入之前编写好的 DemoProperties
通过相应的get方法就能获取到配置信息:
1 | @Autowired |
读取自定义yml配置文件
首先我们创建一个 YamlPropertyLoaderFactory
,代码如下:
1 |
|
然后我们准备一个 CommonProperties
,和读取 application.yml
不同的是,读取自定义的yml
文件,我们需要增加一个注解来指定一下读取的配置文件位置信息,@PropertySource(value = "classpath:common.yml", factory = YamlPropertyLoaderFactory.class)
,代码如下:
1 | @Data |
获取配置信息的方式如下:
1 | @Autowired |
相关案例代码移步 blog-samples 。
欢迎 watch star fork toolkit-spring-boot-project ,一个好用的,开箱即用的工具集。