yml解析方式

demo:

test:
  #  hostport: httpbin.org:80
  #  hostport: localhost:5000
  #  uri: http://${test.hostport}
  uri: lb://httpbin


spring:
  jmx:
    enabled: false
  cloud:
    gateway:
      default-filters:
      - PrefixPath=/httpbin
      - AddResponseHeader=X-Response-Default-Foo, Default-Bar

      routes:
      # =====================================
      # to run server
      # $ wscat --listen 9000
      # to run client
      # $ wscat --connect ws://localhost:8080/echo
      - id: websocket_test
        uri: ws://localhost:9000
        order: 9000
        predicates:
        - Path=/echo
      # =====================================
      - id: default_path_to_httpbin
        uri: ${test.uri}
        order: 10000
        predicates:
        - Path=/**
        filters:
          - AddRequestHeader=X-Request-Foo, Bar  # ①
       # =====================================
       # ① 这一行配置被 spring 解析后会绑定到一个 FilterDefinition 对象。
       # AddRequestHeader ,对应 FilterDefinition 中的 name 属性。AddRequestHeader为AddRequestHeaderGatewayFilterFactory 的类名前缀。
       # X-Request-Foo, Bar ,会被解析成 FilterDefinition 中的 Map 类型属性 args。
       # 此处会被解析成两组键值对,以英文逗号将=后面的字符串分隔成数组,key是固定字符串 _genkey_ + 数组元素下标,value为数组元素自身。

       # =====================================
       # 如此而言还搞明白了另一件事:那就是yml的解析方式
       # yml里面的每一段或者没一句可能都对应了一个java写的实体类,最开始是那种碎片式的properties类,然后把yml里面的每一条都整理出来之后
       # 那么多的碎片,一起送进工厂类里面去生产出需要的配置出来
       # 从yml里面读取配置,然后封到一个Config里面去,然后把这个Config转化成Predicate

      

# =====================================
# 在这里统一记录一下predicates和filter
# predicates,这东西就是java8里面那个函数式编程的东西,无论你输入什么进入,最后返回true或者false的那个东西
# 用predicates可以在转发到路由之前进行判断,如果某些条件不匹配就直接终止这次匹配,用来做条件判断的

# 而filter是在匹配校验完成之后,无论如何都会被转发请求的时候,在请求发到对应的路由器之前或者从路由传回来之后,
# 对发过去或者发回来的结果进行添加或者修改的,这个是结果修正的

# 或者这么理解吧,predicates就是那个if条件判断,而filter是if判断完了之后的aop逻辑
1. yml格式的解析

首先解析出来的格式应该是这样的:

TestEntity{age=418, 
name='Jack', 
params={event=what's up, url=http://www.test.com}, 
favoriteBooks=[Gone with the wind, The Little Prince]
}
(初版)

首先有一个yml文件,然后有这么个解析器,自己写一个对应yml的javabean。
上面的javabean是程序里面写好的,的的确确,如果写的是spring的话那这个bean应该就在哪个包里面了。
那么变量类型从bean类里面就能读取出来了,顺着yml往下读取,读出一行来然后就去bean里面找对应的行,一行一行往里面填。

(第二版)

如此而言还搞明白了另一件事:那就是yml的解析方式
yml里面的每一段或者没一句可能都对应了一个java写的实体类,最开始是那种碎片式的properties类,然后把yml里面的每一条都整理出来之后
那么多的碎片,一起送进工厂类里面去生产出需要的配置出来
从yml里面读取配置,然后封到一个Config里面去,然后把这个Config转化成Predicate

2. yml的中文注释

yml读取中文似乎出问题,如果写了中文是不是那个#的解析就出什么问题了,不能正确读取值了?
反正把IDEA的设置改了就行,改成utf-8的。


你可能感兴趣的:(yml解析方式)