python自动化运维项目实战_全网稀缺的Python/Django/Ansible Playbook自动化运维项目实战视频课程...

配置文件properties比yml优先级高

SpringBoot使用一个全句的配置文件,配置文件名是固定的;

application.properties

application.yml

配置文件的作用:修改SpringBoot自动配置的默认值,SpringBoot在底层都给我们自动配置好了。

YAML, 是/不是一个标记语言

标记语言:

​ 以前的配置文件:xxx.xml

​ yaml:以数据为中心,比json、xml等更适合做配置文件。

2、YAML语法:

1.基本语法

​ k: 空格V:表示一对键值对(空格必须有):

​ 以空格的缩进来控制层级关系

server:

port: 8095

path: /hello

属性和值也是大小写敏感;

2.值的写法

字面量:普通的值(数字、字符串,布尔)

​ k: v: 字面直接来写;

​ 字符串默认不用加上单引号或者双引号;

​ '':会转义特殊字符,特殊字符会被转为一个普通的字符串输出

​ name: "zhangsan \n lisi"

​ 输出:zhangsan \n lisi

​ "":不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思

​ name: "zhangsan \n lisi"

​ 输出:zhangsan

​ lisi

对象(属性和值)(键值对):

​ k: v :在下一行来写对象的属性和值的关系,注意缩进

​ 对象还是k: v的方式

friends:

lastName: zhangsan

age: 20

数组(list、set):

用-值表示数组中的一个元素

pets:

- cat

- dog

- pig

pets: [cat,dog,pig]

3.配置文件值注入

配置文件yml

person:

lastName: zhangsan

age: 18

boss: false

birth: 2018/10/10

maps: {

k1: v1,

k2: 12,

k3: 20

}

lists:

- lisi

- wangwu

dog:

name: 小狗

age: 2

javaBean:

/**

*通过@ConfigurationProperties(prefix = "person")注入

*/

@Component

@ConfigurationProperties(prefix = "person")

public class Person {

private String lastName;

private Integer age;

private Boolean boos;

private Date birth;

private Map maps;

private List lists;

private Dog dog;

我们可以导入pom.xml配置文件处理器,这样编写yml就会有提示

org.springframework.boot

spring-boot-configuration-processor

true

@Value("${person.last-name}")

private String lastName;

@Value("#{11*2}")

private Integer age;

@Value("true")

private Boolean boos;

1.idea中yml配置文件默认utf-8有可能乱码

2.@value获取值与@configurationProperties获取值比较

@configurationProperties

@value功能

批量注入配置文件中的属性

一个个指定

松散绑定

支持

不支持

SpEL

不支持

支持(#/${}...)

JSR303数据校验

支持

不支持

支持

不支持

配置文件yml还是properties他们都能获取到值。

如果说,我们只是在某个业务逻辑中,需要获取一下配置文件中的某项值,我们使用@value

如果为list或map或专门编写了一个javaBean来和配置文件进行映射,使用@ConfigurationProperties。

3.配置文件注入值数据校验

@ConfigurationProperties(prefix = "person")

@Validated

4.@PropertySource与ImportResource

/**

* 将配置文件中配置的每一个属性的值,映射到这个组件中

* @ConfigurationProperties: 告诉springboot将奔雷中的所有属性和配置文件中的相关的配置进行绑定

* prefix = "persion" : 配置文件中哪个下面的所有属性进行一一映射

* 只有这个组件是容器中的组件,才能使用容器提供的ConfigurationProperties功能

* @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;

*/

@PropertySource(value = {"classpath:person.properties"})

@Component

@ConfigurationProperties(prefix = "person")

@Validated

public class Person {

// @Value("${person.last-name}")

private String lastName;

// @Value("#{11*2}")

private Integer age;

// @Value("true")

private Boolean boos;

private Date birth;

private Map maps;

private List lists;

private Dog dog;

@ImportResource: 导入Spring的配置文件,让配置文件里面的内容生效;

SpringBoot里面没有Spirng的配置文件,我们自己编写的配置文件,也不能自动识别;

想让Spring的配置文件生效,加载进来@importResource,标注在一个配置类上

@ImportResource(locations = {"classpath:beans.xml"})

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

SpringBoot推荐给容器中添加组件的方式:

1.配置类===Spring配置文件

2.使用@Bean给容器中添加组件

/**

*@Configuration:指明当前类是一个配置类,就是来替代之前的Spring配置文件

* 在配置文件中用 标签添加组件

*/

@Configuration

public class MyAppConfig {

//将方法的返回值添加到容器中

@Bean

public HelloService helloService(){

System.out.println("配置类:");

return new HelloService();

}

}

4、配置文件占位符

1.随机数

person.last-name=李四${random.uuid}

person.age=${random.int}

2.占位符获取之前的配置的值,如果没有可以用:指定默认值

person.dog.name=${person.last-name}_dog

person.dog.name=${person.hello:hello}_dog

5、Profile

1、多Profile文件

我们在主配置文件编写的时候,文件名可以是application-{profile}.properties/yml

2、yml支持多文档块方式

server:

port: 8095

spring:

profiles:

active: prod

---

server:

port: 8080

spring:

profiles: dev

---

server:

port: 8081

spring:

profiles: prod

你可能感兴趣的:(python自动化运维项目实战)