注:案例工程使用的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 ,一个好用的,开箱即用的工具集。