Spring Boot学习笔记1-yml

之前写代码的时候,用的配置文件都是properties。虽然也用过yml,但由于项目组的使用习惯,所以一直没怎么用yml。

今天开始学习Spring Boot,看到自己找的开源项目中用的是yml,所以还是找资料仔细学习一下。

概念

YAML (YAML Ain’t a Markup Language)YAML不是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。可用于如: Java,C/C++, Ruby, Python, Perl, C#, PHP等。

优点

  1. 结构清晰,容易阅读;
  2. 可以移植性好

语法

YAML 支持以下几种数据类型:
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值

  1. 结构:
    k:v 键值对格式,冒号后面要加一个空格;
    通过空格缩减(不允许使用tab),同一列位置的字段为同一层级;
    大小写敏感;
    #后接注释。

  2. 键值对类型;
    1)字面值(字符串、数字等)
    字符串默认不用加上单引号或者双绰号;

    单引号:不会转义特殊字符,特殊字符最终只是一个普通的字符串数据

    name2: ‘woshishui \n nihao’:输出;woshishui \n nihao

    双引号: 会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思。比如

    name3: “woshishui \n nihao”:输出;woshishui 换行 nihao

name1: woshishui
name2: 'woshishui \t nihao'
name3: "woshishui \t nihao"
name4:#使用~表示null
age: 100
flag: true

补充

boolean: 
    - TRUE  #true,True都可以
    - FALSE  #false,False都可以
float:
    - 3.14
    - 6.8523015e+5  #可以使用科学计数法
int:
    - 123
    - 0b1010_0111_0100_1010_1110    #二进制表示
null:
    nodeName: 'node'
    parent: ~  #使用~表示null
string:
    - 哈哈
    - 'Hello world'  #可以使用双引号或者单引号包裹特殊字符
    - newline
      newline2    #字符串可以拆成多行,每一行会被转化成一个空格
  1. 日期
    正常书写即可
date:
    - 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime: 
    - 2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
  1. 对象(属性和值)、Map(键值对)
student: 
    name: xiaomi
    age: 16

student: {name: xiaomi, age: 16}
  1. 数组、list、set
fruit: 
    - apple
    - orange
    - banana

student: [apple, orange, banana]
  1. 数组对象、list对象、set对象
student: 
    - name: xiaomi
      age: 16
    - name: xiaohong
      age: 18
    - {name: xiaoli, age: 20}
  1. java代码示例
    java代码(省略get,set方法)
public class Student {

    private String lastName;
    private Integer age;
    private Boolean leader;

    private Date birth;
    private Map<String,Object> maps;
    private List<Pets> lists;
    private Pets pet;
    private String[] arr;public class Pets {
    private String name;
    private Integer age;
}

对应的yml

student:
    last-name:  xiaomi
    age: 18
    leader: false
    birth: 2000-01-01
    maps:
        k1:  v1
        k2:  v2
    lists:
        - name: dog
           age: 2
        - name: cat
           age: 4
        - {name: fish, age: 1}
    pets:
        name: dog_pets
        age: 2
  1. 引用
    & 锚点和 * 别名,可以用来引用:
defaults: &defaults
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *defaults

test:
  database: myapp_test
  <<: *defaults

相当于

defaults:
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  adapter:  postgres
  host:     localhost

test:
  database: myapp_test
  adapter:  postgres
  host:     localhost

& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点。
下面是另一个例子:

- &showell Steve 
- Clark 
- Brian 
- Oren 
- *showell 

转为 JavaScript 代码如下:

[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]
  1. 文档块
    对于测试环境,预生产环境,生产环境可以使用不同的配置,如果只想写到一个文件中,yml与是支持的,每个块用----隔开
server:
 port: 8081
spring:
 profiles:
   active: prod  #激活生产环境文档块

---
server:
 port: 8082
spring:
 profiles: dev  #指定开发环境文档块

---
server:
 port: 8083
spring:
 profiles: test  #指定测试环境文档块

使用举例

Mysql和Redis数据库配置

spring:
  # 数据源
  datasource:
    # 参考MyBatis-Plus官网
    dynamic:
      # 是否开启 SQL日志输出,生产环境建议关闭,有性能损耗(P6Spy通过劫持JDBC驱动,在调用实际JDBC驱动前拦截调用的目标语,达到SQL语句日志记录的目的)
      p6spy: true
      # 连接池
      hikari:
        # 连接超时ms
        connection-timeout: 30000
        # 最长生命时长ms
        max-lifetime: 1800000
        # 最大连接数
        max-pool-size: 15
        # 数据库连接池的最小维持连接数
        min-idle: 5
        # 链接测试查询
        connection-test-query: select 1
        #连接池名称
        pool-name: FebsHikariCP
      # 配置默认数据源
      primary: base
      datasource:
        # 数据源-1,名称为 base
        base:
          username: root
          password: root
          # Mysql 16 有cj,Mysql 15 没有
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/febs_base?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
        # 数据源-2,名称为 quartz
        quartz:
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/febs_quartz?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
        #以上会配置一个默认库base,一个子库quartz

  redis:
    # Redis数据库索引(默认为 0)
    database: 0
    # Redis服务器地址
    host: 127.0.0.1
    # Redis服务器连接端口
    port: 6379
    # Redis 密码
    password:
    lettuce:
      pool:
        # 连接池中的最小空闲连接
        min-idle: 8
        # 连接池中的最大空闲连接
        max-idle: 500
        # 连接池最大连接数(使用负值表示没有限制)
        max-active: 2000
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: 10000
    	# 连接超时时间(毫秒)
    	timeout: 5000
发布了7 篇原创文章 · 获赞 1 · 访问量 2568
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览