yaml

1.基础语法

字面量:普通的值 [ 数字,布尔值,字符串 ]

字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;

k: v

注意:

  • “ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;

    比如 :name: “zhang\n san” 输出 :zhang换行 san

  • ‘’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出

    比如 :name: ‘zhang\n san’ 输出 :zhang\n san

对象、Map(键值对)

#对象、Map格式
k:     
	v1:    
	v2:

在下一行来写对象的属性和值得关系,注意缩进;比如:

student:    
	name: zhangsan    
	age: 3

行内写法

student: {name: zhangsan,age: 3}

数组( List、set )

用 - 值表示数组中的一个元素,比如:

pets: 
 - cat 
 - dog 
 - pig

行内写法

pets: [cat,dog,pig]

修改SpringBoot的默认端口号

配置文件中添加,端口号的参数,就可以切换端口;

server:  
 port: 8082

2.给参数设置默认值

  • yml配置,给参数设置默认值
db:
  num: 1
  user: ${MYSQL-USER:root}
  password: ${MYSQL-PWD:root}
  url:
    0: jdbc:mysql://${MYSQL_HOST:  
    
#解释:代码里先从配置文件(springboot的yml配置或者命令行指定)去找key是MYSQL-USER的值,把它的值赋值给user,如果该参数不存在,则就把root赋值给user。   
  • java中取值时设默认值
//yml配置
province:
	city: xxx
	
//java中取值最好也写上默认值
@Value("${province.city:beijing}")
public String city;
  • java -jar -DMYSQL-USER=zs xxx.jar(注入参数)
总结

为什么要这样写,我想到的一点是方便以后修改配置,比如环境移植,换一个新的环境我只需要修改yml配置,或者干脆就在命令行修改

3.yml的配置与映射

导入依赖

<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

例如:实体类 Person 类

@Data
@Component //注册bean到容器中
public class Person {
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
    
    //有参无参构造、get、set方法、toString()方法  
}

编写一个yaml配置!

person:
  name: qinjiang
  age: 3
  happy: false
  birth: 2000/01/01
  maps: {k1: v1,k2: v2}
  lists:
   - code
   - girl
   - music
  dog:
    name: 旺财
    age: 1

我们刚才已经把person这个对象的所有值都写好了,我们现在来注入到我们的类中!

/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component //注册bean
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
}

yaml配置注入到实体类完全OK!

4.yml中配置多个对象

  • yml数组对象的写法

    #写法一
    ftp:
      ftpInfos: #类中的属性名
       - host: 10.1.63.26
         port: 21
         userName: jiangxi
         password: 1qaz@WSX
         ringPaths: ["/home/jiangxi/lihewei/sync1/","/home/jiangxi/lihewei/sync2/"]
       - host: 10.1.63.36
         port: 22
         userName: sichuan
         password: 1qaz@WSX
         ringPaths: ["/home/sichuan/lihewei/sync1/","/home/sichuan/lihewei/sync2/"]
         
         
    #写法二
    ftp:
      ftpInfos:
        - {host: 10.1.63.26, port: 21, userName: jiangxi, password: 1qaz@WSX, ringPaths: ["/home/jiangxi/lihewei/sync1/","/home/jiangxi/lihewei/sync2/"]}
        - {host: 10.1.63.36, port: 22, userName: sichuan, password: 1qaz@WSX, ringPaths: ["/home/sichuan/lihewei/sync1/","/home/sichuan/lihewei/sync2/"]}
    
  • 编写配置类

    @Data
    @Component
    @ConfigurationProperties(prefix = "ftp") // 配置文件的前缀
    public class ftpConfig {
    
        private FtpInfo[] ftpInfos;
    
    }
    
  • 获取数组对象

    public class Demo {
    
        @Autowired
        private ftpConfig ftpConfig;
        
        @Scheduled(cron = "${job.test}")
        public void test()  {
            //获取ftpInfo对象的数组
            FtpInfo[] ftpInfoList = ftpConfig.getFtpInfos();
    
            if (ftpInfoList.length>0){
               //遍历list集合,取出多个ftp配置
               for (FtpInfo ftpInfo : ftpInfoList) {
                    System.out.println(ftpInfo.getHost());
                    System.out.println(ftpInfo.getUserName());
                    System.out.println("路径:");
                    for (String ringPath : ftpInfo.getRingPaths()) {
                         System.out.println(ringPath);
                    }
                      System.out.println("路径");
                    }
             }
        }
    }
    

5.启动springboot项目指定配置文件

  • java -jar -Xms512M -Xmx2048M -Dspring.config.location=config/application-dev.yml getMd5Info.jar
  • home/jdk1.8/bin/java -jar …(未配置jdk的环境变量时,需要先指定jdk路径)
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐