SpringBoot学习系列 | 配置切换指南
来源:互联网 发布:linux运维吧 编辑:程序博客网 时间:2024/06/06 23:56
一般在一个项目中,总是会有好多个环境。比如:
开发环境 -> 测试环境 -> 预发布环境 -> 生产环境
每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一点不同,配置读取可是一个让人有点伤脑筋的问题。
Spring Boot提供了一种优先级配置读取的机制来帮助我们从这种困境中走出来。
常规情况下,我们都知道Spring Boot的配置会从
application.properties
中读取。实际上,从resource
目录下的application.properties
文件读取是Spring Boot配置链中的一环而已。根据Spring Boot的文档,配置使用的优先级从高到低的顺序,具体如下所示:
1. 命令行参数。2. 通过 System.getProperties() 获取的 Java 系统参数。3. 操作系统环境变量。4. 从 java:comp/env 得到的 JNDI 属性。5. 通过 RandomValuePropertySource 生成的“random.*”属性。6. 应用 Jar 文件之外的属性文件(application.properties)。7. 应用 Jar 文件内部的属性文件(application.properties)。8. 在应用配置 Java 类(包含“@Configuration”注解的 Java 类)中通过“@PropertySource”注解声明的属性文件。9. 通过“SpringApplication.setDefaultProperties”声明的默认属性。
这意味着,如果Spring Boot在优先级更高的位置找到了配置,那么它就会无视低级的配置。
比如,我在
application.properties
目录中,写入本地的MySQL的配置:db.jdbc.driver=com.mysql.jdbc.Driverdb.jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8db.jdbc.username=usernamedb.jdbc.password=password
在自己项目调试的阶段,项目总是会使用本地的MySQL数据库。而一旦打包之后,在外部声明一个
test_evn.properties
.启动Jar包的时候, 指定一个外部配置文件:
java -jar demo.jar --spring.config.location=/path/test_evn.properties
这样一来,我们在开发者的机器上总是使用自己的配置,而一到对应的环境,就会使用高级的位置所做的配置。
在代码中读取这些配置也是非常方便的,在代码的逻辑中,其实是无需去关心这个配置是从什么地方来的,只用关注能获取什么配置就够了。
public class ApplicationConfigure { @Value("${db.jdbc.driver}") private String jdbcDriver; @Value("${db.jdbc.url}") private String jdbcUrl; @Value("${db.jdbc.username}") private String jdbcUsername; @Value("${db.jdbc.password}") private String jdbcPassword; // mysql config class // ..... }
有时候我们在项目启动的时候,总是需要先启动一些初始化的类,以前比较常见的做法是写再
static
块中,Spring Boot提供了一个CommandLineRunner
接口,实现这个接口的类总是会被优先启动,并优先执行CommandLineRunner
接口中提供的run()
方法。public class ApplicationConfigure implements CommandLineRunner { @Value("${db.jdbc.driver}") private String jdbcDriver; @Value("${db.jdbc.url}") private String jdbcUrl; @Value("${db.jdbc.username}") private String jdbcUsername; @Value("${db.jdbc.password}") private String jdbcPassword; // mysql config class // ..... @Override public void run(String... strings) throws Exception { // 预先加载的一些方法,类,属性。 }}
如果有多个
CommandLineRunner
接口实现类,那么可以通过注解@Order
来规定所有实现类的运行顺序。通过这一系列API的帮助,Spring Boot让环境配置变得轻松很多。
- SpringBoot学习系列 | 配置切换指南
- SpringBoot学习系列 | 获取properties配置
- SpringBoot配置属性系列
- SpringBoot学习系列博客
- 【SpringBoot系列】二:SpringBoot配置详解
- SpringBoot系列—基础配置
- SpringBoot系列—SSL配置
- springBoot基础系列--properties配置
- springBoot基础系列--properties配置
- springBoot基础系列--properties配置
- springboot学习----自动配置
- springboot学习二(springboot相关配置)
- 【系统学习SpringBoot】SpringBoot读取Property配置
- SpringBoot学习笔记之动态数据源切换
- SpringBoot学习(3) 配置MyBatis
- SpringBoot学习(4) 配置log4j2
- springboot学习-基本配置helloworld
- springboot学习之配置入门
- 判断"CTRL" 键是否被按住
- Struts2 --- Struts2的运行流程及其工作原理
- 关于负数的右移与无符号右移运算小结
- bzoj4503
- 2017.12.22 自定义注解、AOP、拦截器
- SpringBoot学习系列 | 配置切换指南
- 13-1周ArrayList集合
- CDH5.4 安装Phoenix
- final 关键字说明
- (起步1)IDEA2016+VUE+WEBPACK+VUE-CLI 搭建
- Linux设备驱动之中断---thread使用示例
- http超文本协议,让http不再难懂
- 开发者们,2017年你们过得好吗?
- Java高级工程师面试知识汇总(二)