1.Spring Boot优先于配置的惯例,旨在让Web项目尽快启动和运行
2.在一般情况下,不需要做太多的配置就能够让spring boot正常运行
3.要想把Spring Boot玩的溜,就要懂得如何开启各个功能模块的默认配置
4.这就需要了解Spring Boot的配置文件application.properties/yml

(1)Spring Boot使用了一个全局的配置文件application.properties
    <1>当创建springboot项目的时候,系统默认会在src/main/java/resources目录下创建一个application.properties
    <2>有些人由于个人习惯,会将application.properties改为application.yml文件,两种文件格式都支持
      1.建议使用application.yml
      2.无论从可读性、编码一致性考虑,均是最佳选择
      3.可以从根源上解决因application.properties配置中文造成的乱码问题
    <3>Sping Boot的全局配置文件的作用是对一些默认配置的配置值进行修改
    <4>如果工程没有这个application.properties/yml,那就在src/main/java/resources目录下新建一个
(2)自定义属性
    <1>application.properties提供自定义属性的支持,这样就可以把一些常量配置在这里
      1.例如在application.properties中配置如下信息:user.name="张三" user.age=18
        例如在application.yml中配置如下信息:user:
                                               name:张三 (注意冒号后面有空格)
                                               age:18(注意冒号后面有空格)
      2.在要使用的地方通过注解@Value("${属性名}"),就可以绑定到想要的属性上面
      3.代码示例如下:
        @RestController
        public class UserController {
        @Value("${user.name}")
        private String name;
        @Value("${user.age}")
        private int age;
        @RequestMapping("/user")
        public String user(){return name+":"+age;}}
     <2>启动工程,访问:localhost:8080/miya,浏览器显示:张三:18
(3)将配置文件的属性赋给实体类      
     <1>有时候属性太多了,一个个绑定到属性字段上太累,官方提倡绑定一个对象的bean,并将属性值赋予给对象bean
     <2>例如配置文件application.yml中配置如下信息:
        myuser:
          name: 张三(注意冒号后面有空格)
          age: 12(注意冒号后面有空格)
          uuid : ${random.uuid}(注意冒号后面有空格)
      <3>其中配置文件中用到了${random} ,它可以用来生成各种不同类型的随机值
      <4>将这些属性赋于给一个javabean,首先创建一个javabean:ConfigBean.java
        @ConfigurationProperties(prefix = "myuser")
        public class MyUserBean {
           private String name;
           private int age;
           private String uuid;
           省略了getter setter....}
          1.需要加个注解@ConfigurationProperties,并加上它的前缀prefix 
          2.前缀的值为配置文件中的属性
       <5>另外需要在应用类或者SpringBoot入口类,加EnableConfigurationProperties注解
          1.一般直接在应用类添加该注解
          2.如果配置属性对应的JavaBean过多,在SpringBoot入口添加该注解,后期维护较大,不好查找
          3.示例代码如下:    
          @RestController
          @EnableConfigurationProperties({MyUserBean.class})
          public class MyUserController {
          @Autowired
          MyUserBean myUserBean;
          @RequestMapping(value = "/myuser")
          public String miya(){
          return myUserBean.getName()+" >"+ myUserBean.getAge()+">"+myUserBean.getUuid();}
      <6>不管是在应用类或者SpringBoot入口类,最后都要在应用类Controller中引入创建的JavaBean 
          1.通过spring注入的方式引入
          2.@Resource
	        MyUserBean myUserBean; 
      <7>启动工程,访问localhost:8080/myuser,配置文件信息就读到了
(4)参数间引用
      <1>在application.properties/yml中的各个参数之间也可以直接引用来使用
      <2>就像下面的设置:
      myuser:
          name: 张三(注意冒号后面有空格)
          age: 12(注意冒号后面有空格)
          uuid : ${random.uuid}(注意冒号后面有空格)
          greeting: hi,i'm  ${my.name}
     <3>这里greeting参数属性引用了name属性
(5)自定义配置文件
     <1>有时候不希望把所有配置都放在application.properties/yml里面,这时候可以另外定义一个  
     <2>这里取名为test.properties/yml,路径跟也放在src/main/resources下面:配置信息如下
           myconfig.name=forezp
           myconfig.age=12
     <3>将这个配置文件信息赋予给一个javabean,新建一个bean类,如下:
        @Configuration
        @PropertySource(value = "classpath:test.properties")
        @ConfigurationProperties(prefix = "myconfig")
        public class MyConfigBean {
          private String name;
          private int age;
          {省略get/set方法}
       1.如果使用的是1.5以前的版本,那么可以通过locations指定properties文件的位置,这样:
       @ConfigurationProperties(prefix = "myconfig",locations="classpath:test.properties")
       2.1.5版本后就没有这个属性了,在最新版本的springboot,需要加上面那三个注解才可以读取
     <4>自定义配置文件的使用处理JavaBean不同多了两个注解,在应用类或者SpringBoot入口类使用完全一样,如下:
        @RestController
        @EnableConfigurationProperties({MyConfigBean.class,MyUserBean.class})
        public class MyTestController {
           @Autowired
           MyConfigBean configBean;
           @Autowired
           MyUserBean user;
           @RequestMapping(value = "/myConfigBean")
           public String miya(){
             return configBean.getName()+" >"+ configBean.getAge();}
           @RequestMapping(value = "/user")
           public String user(){
             return user.getName()+user.getAge();}}
      <5>启动工程,打开localhost:8080/user;浏览器会显示结果
(6)随机值配置
      <1>配置文件中${random} 可以用来生成各种不同类型的随机值
      <2>简化了代码生成的麻烦,例如 生成 int 值、long 值或者 string 字符串
          user.secret=${random.value}
          user.number=${random.int}
          user.bignumber=${random.long}
          user.uuid=${random.uuid}
          user.number.less.than.ten=${random.int(10)}
          user.number.in.range=${random.int[1024,65536]}
(7)外部配置-命令行参数配置
     <1>不但可以通过配置文件设置属性,也可以通过命令行设置属性
     <2>Spring Boot是基于jar包运行的,打成jar包的程序可以直接通过下面命令运行:java -jar xx.jar
     <3>可以以下命令修改tomcat端口号:java -jar xx.jar --server.port=9090
     <4>命令行中连续的两个减号--就是对application.properties中的属性值进行赋值的标识
     <5>java -jar xx.jar --server.port=9090等价于在application.properties中添加属性server.port=9090
     <6>高优先级属性源里设置的属性都会覆盖低优先级的相同属性
     <7>命令行属性就覆盖了application.properties的属性
(8)配置文件的优先级
     <1>src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性     
     <2>如果application.properties和application.yml同时存在相同文件夹下且配置属性相同,那么:
        1.application.properties里的属性就会覆盖application.yml
        2.application.properties的优先级高于application.yml
(9)多个环境配置文件
     <1>在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式
     <2>{profile}对应环境标识,比如:
        1.application-dev.properties:开发环境
        2.application-prod.properties:生产环境
        3.application-test.properties:测试环境
     <3>各个环境的配置会略有不同,可以根据这个创建多份配置文件,由主配置文件来控制读取各个子环境配置 
     <4>分别创建三个应用环境的配置和一个主配置
     <5>主配置文件:application.properties/yml
        1.想使用对应的环境,需要使用spring.profiles.active属性来设置激活,方式3种如下:
             -命令行:--spring.profiles.active=dev
             -配置文件:spring.profiles.active=dev
             -jvm参数:-Dspring.profiles.active=dev
        2.在主配置文件中:只需要在application.properties/yml中使用spring.profiles.active属性来设置激活  
        3.值对应上面提到的{profile},这里就是指dev、prod、test这3个
           例如:具体使用那个子配置文件的标识名称:开发环境
                spring.profiles.active=dev   
     <6>各个子环境配置 
        1.application-dev.properties:开发环境
          1.1.配置内容如下:
             # 开发环境端口
             server.port=8081 
        2.application-test.properties:测试环境
          2.1.配置内容如下:
             # 开发环境端口
             server.port=8082   
      <7>更改主配置中的spring.profiles.active=dev这个参数就可以切换不同子配置文件了  
(10)多个环境配置文件应用实例如下:这里以.yml文件格式为例
      <1>主配置文件:application.yml
            spring:
              profiles:
                active: dev
      <2>子环境配置文件如下:application-dev.yml
          myuser:
           name: 李四
           age: 18
           uuid : ${random.uuid}
          server:
           port: 8081
       <3>浏览器访问:localhost:8081/myuser    
          1.主配置文件中引用子环境配置文件
          1.端口号不再是默认的8080
          2.而是子环境配置文件中的端口号8081