本篇博客主要讲解下在Spring Boot中如何获取配置文件的值。
Spring Boot默认生成的配置文件为application.properties,不过它也支持yaml语言的配置文件,
两者之间的差别并不是很大,只是yaml语言的配置文件层次结构更明显,可读性更强,因此目前使用的更多一些。
我们假设本来application.properties的配置为:
spring.main.banner-mode=off
那么如何将配置文件切换为application.yml呢?
首先删除掉原来的配置文件application.properties,新增配置文件application.yml,新增方式如下:
然后修改application.yml为:
spring: main: banner-mode: "off"
运行结果和原来使用properties配置文件时一致。
首先在application.yml中添加如下配置:
book: author: wangyunfei name: spring boot
然后修改启动类的代码为:
package com.zwwhnly.springbootaction; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @SpringBootApplication public class SpringbootActionApplication { @Value("${book.name}") private String bookName; @Value("${book.author}") private String bookAuthor; @RequestMapping("/") public String index() { return "book name is:" + bookName + " and book author is:" + bookAuthor; } public static void main(String[] args) { SpringApplication.run(SpringbootActionApplication.class, args); } }
运行项目,在浏览器中输入http://localhost:8080/,会看到如下信息:
这种方式和在Spring项目中的使用方式一样,更多的细节,可以查看我之前总结的博客:
Spring入门(九):运行时值注入 。
Spring Boot还提供了 @ConfigurationProperties
注解来获取配置文件值,该种方式可把配置文件值和一个Bean自动关联起来,使用起来更加方便而且类型安全, 建议使用这种方式 。
首先,在application.yml中添加如下配置:
author: name: wangyunfei age: 32
然后,新建类AuthorSettings,添加 @Component
注解和 @ConfigurationProperties
注解:
package com.zwwhnly.springbootaction; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "author") public class AuthorSettings { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
这里的重点是 @ConfigurationProperties
注解,它的prefix属性用来指定配置的前缀,如本例中的author。
然后修改启动类的代码为:
package com.zwwhnly.springbootaction; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @SpringBootApplication public class SpringbootActionApplication { @Autowired private AuthorSettings authorSettings; @RequestMapping("/") public String index() { return "author name is " + authorSettings.getName() + " and author age is " + authorSettings.getAge(); } public static void main(String[] args) { SpringApplication.run(SpringbootActionApplication.class, args); } }
运行项目,在浏览器中输入http://localhost:8080/,会看到如下信息:
一般情况下,我们开发的应用程序都会有多套环境, 如dev环境,qa环境,prod环境,那么如何实现多套环境下的配置管理呢?
其实在Spring Boot下,我们可以使用Profile来实现,接下来讲解下具体的实现方式。
首先,新建2个配置文件:application-dev.yml,application-prod.yml。
此时的项目结构如下图所示:
如果有的同学比较喜欢用properties文件,可以用下图中的方式新建:
默认情况下,启动的端口号为8080,如果我们希望在dev环境使用端口号8082,在prod环境使用端口号8083,那么可以修改配置文件如下:
application-dev.yml新增如下配置:
server: port: 8082
application-prod.yml新增如下配置:
server: port: 8083
运行项目,如下图所示:
我们会发现,仍然使用的是默认的端口号8080,那么如何指定使用dev或者prod环境的端口呢?
我们需要在application.yml新增如下配置:
spring: profiles: active: dev
此时,再次运行项目,会发现使用的是端口号8082,也就是application-dev.yml文件中配置的。
如果希望使用prod环境的,可以修改配置为:
spring: profiles: active: prod
运行结果为:
关于Spring项目中Profile的使用可以查看我之前总结的博客: Spring入门(七):Spring Profile使用讲解 。
源码地址: https://github.com/zwwhnly/springboot-action.git ,欢迎下载。
汪云飞《Java EE开发的颠覆者:Spring Boot实战》
SpringBoot - 多Profile使用与切换
IDEA如何创建.properties文件
欢迎扫码关注微信公众号:「申城异乡人」,定期分享Java技术干货,让我们一起进步。