4.1 多环境配置


  • 首先 配置文件 是可以写在 四个位置的,官方 给过 解释。看下图。

    file:项目目录下。
    classpath:就是 我们的那个 resources 目录下。

上述图片的 顺序 指的是 优先级。也就是说 如果 存在 file:./config/ 下的 application.yaml 的话,就以 这个 yaml 为主!

实际开发中,可能会有多套 配置。那么 如何 选择 一个配置文件,然后 启动项目呢?

  • application.properties 如何实现多环境配置

多套配置文件的格式:application-环境名

application.properties 里面 设置

spring.profiles.active = 环境名
  • application.yaml 如何实现多环境配置

yaml 支持 环境分块 处理。就是 一个文件里面,可以 处理 多个 环境配置的内容。都以三个短横线分隔 —

server:
	port: 8081
spring:
	profiles:
		active: dev # 激活 dev 环境的配置

---
server:
	port: 8082
spring:
	profiles: dev #环境名

---
server:
	port: 8083
spring:
	profiles: test #环境名

4.2 配置文件小技巧

application.yaml/properties自动装配 联系很大,如果我们 随便 选择 一个配置类。点进去 看一下,就会发现奥秘了。

  • 比如 HttpEncodingAutoConfiguration

springboot yml配置mysql双主备配置 springboot配置多个yml文件_配置文件


首先映入眼帘的是 自动装配。点击去 你会 看到 @Configuration 也就是说它是个装配类。

springboot yml配置mysql双主备配置 springboot配置多个yml文件_自动装配_02


@ConditionalOnMissingBean:判断当前这个 类 是否 已经 注册 Bean,如果 注册了 就不进行拦截。

@Bean:把 一个 方法 注册到 IOC 容器中,变成一个 Bean。它就可以 getBean 直接拿到这个 方法了。但还是 依赖于 自己的 类。

springboot yml配置mysql双主备配置 springboot配置多个yml文件_java_03

ServerProperties.class 然后 我们去看下 这个 允许配置属性的这个类。

springboot yml配置mysql双主备配置 springboot配置多个yml文件_servlet_04


springboot yml配置mysql双主备配置 springboot配置多个yml文件_自动装配_05

@ConditionalOnWebApplication:根据不同的条件,来判断当前的配置或者类 是否生效。**比如我们上述图的意思是 是否是一个 Servlet 类型的应用,其实就是 WEB 应用。**如果不是,那这个配置肯定不生效。

@ConditionalOnClass:是否存在一个类,如果存在就生效。不存在就拉倒。比如上图的意思是,是否存在 编码过滤这个类。

@ConditionalOnProperty:是否存在 这样的配置属性。如果不存在则怎么样。上述图的意思是说,如果不存在 server.servlet.encoding 那么就帮你填写上,而且 值 为 enabled。

我操,这一下子 就明白了。有个 专门 接受 配置文件 控制的 属性类。然后 这个 属性类 肯定对 我们的 这个 装配类 有影响。

springboot yml配置mysql双主备配置 springboot配置多个yml文件_自动装配_06


下面的这个 就是 它的 所有 属性。这玩意 在 2.2 那阵,还没这么 牛逼呢。现在 属性 太多了。

springboot yml配置mysql双主备配置 springboot配置多个yml文件_java_07

  • 我们来 自己 测试一下。

springboot yml配置mysql双主备配置 springboot配置多个yml文件_java_08


综上所述,可以总结一个小技巧:在我们的配置文件中,其实想要做一个配置。目标是明确的。就是找到想要配置的那个自动配置类。然后 去 那个 类下面 去找一下,我们可以 配哪些东西。可以怎么配,前缀是什么,都能找到。


4.3 自动装配原理的精髓

  1. SpringBoot 启动的时候,会根据 @SpringBootApplication 注解加载大量的 自动配置类。
  2. 这个时候,我们就要观察,我们所需要的功能是否在SpringBoot默认的自动装配类中。(没有的话,那肯定要去 pom.xml 中引入 依赖呀。)
  3. 其次,我们再去 看下 自动配置的类中,到底配置了哪些 组件(Bean),如果 足矣。那么就不需要 再去 手动配置了。
  4. 自动装配的类,可以改其配置。如果有需求的话,那么可以在 配置文件中 进行 指定的属性值 修改。

xxxxAutoConfiguration:自动配置类,可以给IOC容器中 添加 组件(Bean)
xxxxProperties/yaml:配置文件,可以修改 自动配置类中的 相关属性。

如果想要测试那些 配置类生效了,可以用

debug: true

springboot yml配置mysql双主备配置 springboot配置多个yml文件_servlet_09


Positive matches:表示生效的配置。

springboot yml配置mysql双主备配置 springboot配置多个yml文件_配置文件_10

Negative matches: 表示没有生效的配置。