从Spring-Boot开始深入理解Spring系列(二)——Spring-Boot配置文件

版权声明:本文为博主原创文章,大家喜欢的话,多多转载吧! https://blog.csdn.net/u011500356/article/details/85344302

Springboot 如何简化Spring的配置文件?

  • 默认只提供一个统一的固定名称的全局配置文件。
  • 所有配置均有默认值,所以你可以不用配置任何内容,即可启动一个Springboot应用程序。
  • 程序员基本上,只需要修改默认配置中属性的值就好了。

为什么要如此设计?

回想一下,你要使用Spring技术栈,去开发一个java的web应用。你都需要做些什么?
1、配置jdbc数据源
2、配置事务
3、配置aop
4、配置bean的装载
5、配置……

我知道此时的你估计已经奔溃。多,而且,非常容易出错。所以,对于传统的Spring开发,对于配置文件这一项的诟病,结合项目。做出如下总结:

  1. 手工编写,重复而且繁杂的配置文件
  2. 配置文件数量多。
  3. 每个人命名风格都不一样,配置文件名称不一,无形中抬高了学习和理解成本。
  4. 配置文件中,常见属性的命名风格不一,没有规范。程序的可读性、可移植性不好。

Springboot都支持哪些格式的配置文件?

  1. yaml格式
  2. Properties格式
  3. xml
  4. json
  5. ……

Springboot的配置文件的优先级

注意:优先级高的覆盖优先级低的,所有的配置文件中的属性形成互补
在这里插入图片描述

例如:

Springboot的application属性文件的加载优先级

原则:位置高的,覆盖位置低的
即:

1、当前目录下的/config子目录
2、当前目录
3、一个classpath下的?Config包
4、classpath的根路径

为什么更推荐使用yaml格式?

  1. 它是一种直观的,能够被电脑识别的数据序列化格式
  2. 是一个可读性高,并且容易被人类阅读
  3. 容易和脚本语言交互

如何读取配置文件的内容?

两种方式:

  1. 通过注解,@Value,或者@ConfigurationProperties去绑定到一个Javabean上
  2. 获取 Spring Boot 的环境变量

关键代码示例:

ConfigurableApplicationContext ctx = SpringApplication.run(SpringbootPropertiesApplication.class, args);
ctx.getEnvironment().getProperty("db.link.url");

或者:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

@Component
public class MyConf {

    @Autowired
    private Environment env;

    public void show(){
        System.out.println(env.getProperty("db.link.url"));

    }
}

配置文件的最佳实践和项目实战技巧?

使用属性占位符

生成随机数

随机字符串
com.didispace.blog.value=${random.value}

随机int
com.didispace.blog.number=${random.int}

随机long
com.didispace.blog.bignumber=${random.long}
10以内的随机数

com.didispace.blog.test1=${random.int(10)}

10-20的随机数
com.didispace.blog.test2=${random.int[10,20]}

多环境配置

我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事。
对于多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包,Spring Boot也不例外,或者说更加简单。
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:

application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境

针对各环境新建不同的配置文件application-dev.properties、application-test.properties、application-prod.properties
application.properties中设置spring.profiles.active=dev,就是说默认以dev环境设置

自定义配置文件

使用数组或者集合

项目中使用配置文件常见问题总结:

  1. 乱码问题(思路:所有乱码问题,基本原理都是因为,编码和解码的方式不一致导致的。所以,始终保持一致的编码格式)
  2. 加载不到配置文件的问题(思路:路径错误或者含路径含有中文、名称拼写是否一致。)
  3. 在项目中配置的属性,始终加载了错误的值(思路:搞清配置文件的加载优先级和覆盖问题,搞清楚外部配置文件之间,属性的互补性。)

思考:

从Springboot对配置文件的设计,我们能学到什么?

第一:约定大于配置

  1. 将常用配置属性提供标准统一的写法。程序员,只需要修改值就好了。
  2. 配置文件的名称,固定为application.properties 或者application.yml

第二:一切都要考虑提供默认值

第三:简化,只有一个入口!统一配置文件的入口。变多个为一个。提供全局的默认配置文件

1、使用devtools时,默认配置
2、 Springboot的常用默认配置
3、本文源码:https://github.com/bill4j/spring-boot-course/tree/master/spring-boot-config

猜你喜欢

转载自blog.csdn.net/u011500356/article/details/85344302