zoukankan      html  css  js  c++  java
  • YAML配置,spring boot 配置文件

    1 概念
    YAML是一种人们可以轻松阅读的数据序列化格式,并且它非常适合对动态编程语言中使用的数据类型进行编码。YAML是YAML Ain't Markup Language简写,和GNU("GNU's Not Unix!")一样,YAML是一个递归着说“不”的名字。不同的是,GNU对UNIX说不,YAML说不的对象是XML。YAML不是XML。它可以用作数据序列,配置文件,log文件,Internat信息和过滤。
    2 优点
    YAML的可读性好。
    YAML和脚本语言的交互性好。
    YAML使用实现语言的数据类型。
    YAML有一个一致的信息模型。
    YAML易于实现。
    3 YAML的适用范围
    由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用。列一下现有的语言实现:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript。除了Java,其他都是脚本语言.
    YAML比较适合做序列化。因为它是宿主语言数据类型直转的。
    YAML做配置文件也不错。比如Ruby on Rails的配置就选用的YAML。对ROR而言,这很自然,也很省事.
    由于兼容性问题,不同语言间的数据流转建议现在不要用YAML.
    4 YAML不足
    YAML和XML不同,没有自己的数据类型的定义,而是使用实现语言的数据类型。这一点,有可能是出奇制胜的地方,也可能是一个败笔。如果兼容性保证的不好的话,YAML数据在不同语言间流转会有问题。
    假如兼容性没问题的话,YAML就太完美了。轻巧,敏捷,高效,简便,通用。

    YAML与properties的不同     

    YAML的配置文件格式例如:

    environments:
        dev:
              url: http://dev.bar.com
              name: Developer Setup
        prod:
              url: http://foo.bar.com
              name: My Cool App

    与其等价的properties:

    environments.dev.url=http://dev.bar.com
    environments.dev.name=Develop Setup
    environments.prod.url=http://foo.bar.com
    environments.prod.name=My Cool App

    通过YAML的配置方式我们可以看出,配置字符量比properties少了很多,且结构变得更清晰。

     

     自定义参数

    除了可以在Spring Boot的配置文件中设置各个starter模块中预定义的配置属性,我们还可以在配置文件中定义一些我们需要的自定义属性。比如在application.properties中添加:

    book.name=SpringCloudInAction
    book.author=ZhaiYongchao

    然后,在应用中可以通过@Value注解来加载这些自定义的参数,比如:

    @Component
    public class Book{
        @Value(“${book.name}”)
        private String name;
        @Value(“${book.author}”)
        private String author;
        //省略getter和setter
    }

    然后再Spring Boot的主类中指出该类所在包即可。

    @Value注解加载属性时可以支持两种表达式来进行配置:

    • 一种是上面介绍的PlaceHolder方式,格式为${…},大括号内为PlaceHolder.
    • 另一种是使用SpEL表达式,格式为#{…},大括号内为SpEL表达式。

    参数引用

    book.name=Spring Cloud
    book.author=ZhaiYongchao
    book.desc=${book.author} is writing 《${book.name}》

    这样,book.desc的值为:ZhaiYongchao is writing 《Spring Cloud》。

    使用随机数

    在配置文件中使用${random.int}即可获得一个随机的int型数据。

    名称

    描述

    ${random.value}

    取得随机字符串

    ${random.int} 取得随机int型数据
    ${random.long} 取得随机long型数据
    ${random.int(10)} 取得10以内的随机数
    ${random.int[10,20]} 取得10~20的随机数

     命令行参数

    我们使用java -jar命令来启动一个spring boot应用,启动时,可以设置参数,例如:

    java –jar xxx.jar --server.port=8081

    该命令直接以命令行的方式指定了spring boot应用启动的端口号为8081.

            以命令行的方式启动spring boot应用时,连续的--就是对application.properties中的属性进行赋值的标识。

    多环境配置

    上面通过命令行的方式修改应用的配置文件,当应用特别多时,这样的方式也许并不太好。因此需要多环境配置。

    关于profile更多内容见《Spring 3.1新特性之一:spring注解之@profile

    方式一:

    YAML还可以在一个单个文件中通过使用spring.profiles属性来定义多个不同的环境配置。例如:

    server:
        port:8881
    ---
    spring:
        profiles:test
    server:
        port:8882
    ----
    spring:
        profiles: prod
    server:
        port:8883

    当指定为test环境时,server.port将使用8882端口;prod环境时,server.port将使用8883端口;没有指定时使用8881端口。

    方式二:

    YAML将属性加载到内存中保存的是有序的,所以当配置文件中的信息需要具备顺序含义时,YAML的配置方式比起properties配置文件更有优势。

            在spirng boot中,多环境配置的文件名需要满足 application-{profile}.properties的格式,比如:

    • application-dev.properties 开发环境
    • application-test.properties 测试环境
    • application-prod.properties 生产环境

            具体哪个配置文件会被加载,需要在application.properties文件中通过string.profiles.active属性来设置,其值对应配置文件中的{profile}值(也可以使用java -jar xxx.jar --spring.profiles.active命令指定需要加载的配置文件)。如spring.profiles.active=test就会加载application-test.properties配置文件内容。

    加载顺序

     监控与管理

            简短的前言

                  在为服务架构中,通过将庞大的单体系统拆分成多个提供不同服务的应用。虽然各个应用的内部逻辑因分解而得以简化,但由于部署应用的数量成倍增长,使得系统的维护复杂度大大提升。

            随着应用的不断增加,系统集群中出现故障的次数也越来越多,虽然在高可用机制的保护下,个别故障不会影响系统的对外服务,但是这些频繁出现的鼓掌需要被及时发现和处理才能长期保证系  统处于健康可用状态。为了达到这个目的,我们需要一套自动化的监控运维机制,该机制要能够不间断地收集各个微幅务应用的各项指标情况,并根据这些基础指标信息来制定监控和预警规则。

    初始actuator

            引入该模块能够自动为spring boot构建的应用提供一系列用于监控的端点。Spring Cloud在实现各个为服务组件的时候,进一步为该模块做了不少扩展。比如,为原生端点增加了更多的指标和度量信息。

     引入actuator

    1. 在现有的spring boot应用的pom.xml文件中引入spring-boot-starter-actuator依赖即可。

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency> 

        2.增加该依赖后重新启动应用。此时可以在控制台中看到如下所示:

    image

    上图显示了一批端点定义,这些端点并非我们在程序中定义的,而是由spring-boot-starter-actuator模块根据应用依赖和配置自动创建出来的监控和管理端点。端点具体还以不再说明,可以自行百度。

    如果你的世界是一条一维的曲线,即便是一颗小小的沙砾也会成为你永远迈不过去的坎;如果你的世界是一张二维的曲面,哪怕是一条细若游丝的线,也会成为横亘你面前永远无法逾越的鸿沟
  • 相关阅读:
    如何将javaweb项目部署到阿里云服务器上
    解决ueditor配置文件第一行报错及乱码问题
    解决web.xml中<async-supported>true</async-supported>报错问题
    解决建完Maven项目没有main文件夹问题
    CentOS常用命令之搜索文件
    CentOS常用命令之创建删除剪切链接
    Jupyter notebook: TypeError: __init__() got an unexpected keyword argument 'io_loop 问题
    编译分布式并行版caffe(Open MPI)教程
    树状数组
    马拉车算法
  • 原文地址:https://www.cnblogs.com/duanxz/p/3733299.html
Copyright © 2011-2022 走看看