超全、超详的Spring Boot配置讲解笔记( 二 )

注意如果需要使用表达式只有@Value才可以,@Value("#{10*2}) 结果为:20
两种方式的区别:

超全、超详的Spring Boot配置讲解笔记

文章插图
 
两种方式的适用场合:
当只需要为某个值提供注入时,推荐使用@Value方式 。
当需要对整个对象的整体进行赋值时,使用@ConfigurationProperties 。
加载外部配置文件
如果我们将所有的配置信息都写在application.yml文件中,则到时候yml文件会变得非常庞大,不太方便我们进行维护 。
我们可以对配置中的内容进行拆分,拆分到多个文件中 。这样就提高了配置的可维护性 。
引入外部配置文件:
  1. @PropertySource(value=https://www.isolves.com/it/cxkf/yy/JAVA/2019-09-18/{"classpath:student.properties"})
  2. @ImportResource(locations={"classpath:spring.xml"}
  3. @Configuration和@Bean方式 。(SpringBoot推荐方式)
第一种方式:@ProperSource方式:需要注入的类的前面使用该注解 。
第二种方式:@ImportResource方式首先添加一个spring的配置文件,在里面添加需要映射的类 。在启动的SpringBootApplication前面使用该注解
第三种方式:@Configuration和@Bean方式添加一个自定义配置类 。
//第三种方式@Configurationpublic class MyConfig { //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名 @Bean public MySQLInfo mySQLInfo(){ System.out.println("配置类@Bean给容器中添加组件了..."); return new MySQLInfo(); }}切换多个外部配置文件
真实环境中,有时候需要配置多个配置文件,可以使用spring.profile.active来进行切换 。
比如现在我们有三个配置文件:
  • application.yml
  • application-dev.yml
  • application-prod.yml
我们在application.yml中通过spring.profile.active = dev(prod)来选择需要加装的配置文件 。
或者我们可以通过maven将项目打成jar包通过命令行使用以下命令来指定环境
java –jar springboot02-0.0.1-SHAPSHOT.jar –spring.profiles.active=dev</span class="hljs-attribute"> 
文档块
在yml文档中,可以适用---来将一个文档拆分为多个文档块 。可以在不同文档块中分别定义不同的环境 。
然后通过spring.profiles=xxx来对文档块进行命名 。最后通过第一个文档块制定spring.profiles.active=xxx来指定到底激活哪个文档块 。
#application.ymlspring: profiles: active: dev #指定激活dev文档---server: port: 8081spring: profiles: dev #给文档命名为dev配置文件加载位置和顺序
springboot启动会扫描一下位置的配置文件作为springboot的默认配置文件 。
  1. 项目路径下的config文件夹
  2. 项目路径下
  3. classpath路径下config文件夹
  4. classpath路径下
以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,如果冲突的情况,高优先级配置内容会覆盖低优先级配置内容 。如果不冲突,形成互补配置 。
我们也可以通过配置spring.config.location来改变默认配置 。使用命令行方式加载,否则优先级不够 。
java –jar xxxx.jar –spring.config.location=配置文件路径 
外部配置加载顺序
pringBoot也可以从以下位置加载配置;优先级从高到低,高优先级的配置覆盖低优先级的配置,所有配置形成互补配置 。
  1. 命令行参数
  2. 来自java:comp/env的JNDI属性
  3. Java系统属性(System.getProperties())
  4. 操作系统环境变量
  5. RandomValuePropertySource配置的random.*属性值
  6. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  7. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
  8. jar包外部的application.properties或application.yml(不带spring.profile)配置文件
  9. jar包内部的application.properties或application.yml(不带spring.profile)配置文件
  10. @Configuration注解类上的@PropertySource
  11. 通过SpringApplication.setDefaultProperties指定的默认属性
官方参考文档:https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#boot-features-external-config
springboot自动配置
SpringBoot启动会加载大量的自动配置类
我们看我们需要的功能有没有SpringBoot默认写好的自动配置类;
我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件有,我们就不需要再来配置了)
给容器中自动配置类添加组件的时候,会从properties类中获取某些属性 。我们就可以在配置文件中指定这些属性的值;


推荐阅读