(一)详细介绍说明


https://www.yuque.com/docs/share/dec8f1f4-8a8a-4f76-ae24-722788814000?#

(二)静态资源页面存放位置

有两种

需要自己在这里创建static文件夹
配置文件 - 图1
第二种
配置文件 - 图2

(三)yaml






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

案例:zjj_SpringBoot_57ff5965-0995-4672-655c-b89122c2b7f2




yaml和xml对比

YAML:配置例子

server:
port: 8081

XML:

8081


结果就是 yaml更简洁

基本语法
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

| server:
port: 8888

///yaml配置文件包学习开始

person:
lastName: 张俊杰
age: 25
boss: false
birth: 2017/12/12

Map取值

maps: {key1: 张俊杰, key2: 程序员}

集合取值

lists: 数据A,数据B,数据C
dog:
name: 小萨
age: 6

yaml配置文件包学习结束/// |

| —- |

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

值的写法

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

k: v:字面直接来写;
字符串默认不用加上单引号或者双引号;

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

name: “zhangsan \n lisi”:

输出;zhangsan 换行 lisi


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

name: ‘zhangsan \n lisi’:

输出;zhangsan \n lisi




1.yaml语法详细参考


https://www.yuque.com/docs/share/4c225906-9649-4b19-be18-0ab6a39ca5fe?#


2.配置文件处理器

|
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> | | —- |

这样在yaml输入的时候就会有提示了

3.读取yaml配置文件(Bean类的方式)


也可以指定属性配置文件的位置:

@Configuration
@PropertySource(“classpath:/com/myco/app.properties”)
public class AppConfig {

参考:
https://blog.csdn.net/wangmx1993328/article/details/81005170



| /**

  • 将配置文件中配置的每一个属性的值,映射到这个组件中
    *
  • @ConfigurationProperties**:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定; **prefix = “person”:配置文件中哪个下面的所有属性进行一一映射
  • 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
  • @ConfigurationProperties(prefix = “person”)默认从全局配置文件中获取值;
    /

    @Component
    @ConfigurationProperties(prefix = “person”)//和yaml配置文件的前缀要对应
    public class Person {

    private String lastName;

    private Integer age;

    private Boolean boss;

    private Date birth;

    private Map maps;
    private List lists;
    private Dog *dog; // getset………….. | | —- |

    然后在任意地方注入进来就可以了

    | @Autowired
    private Person person;

    @Test
    public void ceui1() {
    System.out.println(person);
    } | | —- |






    4.读取yaml的配置信息赋值(注解方式)




    包含static和非static的两种方式
    主要是使用 @Value注解 来获取Yml的配置文件信息
    非静态
    yaml

    | person:
    lastName: 张俊杰
    | | —- |


    Java代码

    | @Value(“${person.lastName}”)
    private String lastName;

    @Test
    public void ceui1() {

    System.out.println(lastName);//获取到配置文件的信息了
    } | | —- |



    如果是static修饰的
    yaml

    | person:
    lastName: 张俊杰
    age: 25 | | —- |


    Java代码 ,注意set方法一定不要声明为static.

    | @RunWith(SpringJUnit4ClassRunner.class) //固定的代码
    @SpringBootTest(classes = DemoApplication.class) //DemoApplication是你自己编写的启动类
    public class YamlTest { **private static String age;

    @Value(
    “${person.age}”)/这个必须得和yml写的内容对上/
    public void setAge(String age) {
    /DemoApplication是当前类,意思是把形参的值赋值给当前类的ceui成员变量/
    YamlTest.age = age;
    }

    @Test
    public void ceui() {
    System.
    out**.println(age);

    } | | —- |



    5.占位符

    com.didispace.blog.name=程序猿DD

    com.didispace.blog.title=Spring Boot教程

    com.didispace.blog.desc=${com.didispace.blog.name}正在努力写《${com.didispace.blog.title}》


    6.配置文件设置随机数

    随机字符串

    com.didispace.blog.value=${random.value}

    # 随机int

    com.didispace.blog.number=${random.int}

    # 随机long

    com.didispace.blog.bignumber=${random.long}

    # 10以内的随机数

    com.didispace.blog.test1=${random.int(10)}

    # 10-20的随机数

    com.didispace.blog.test2=${random.int[10,20]}



    7.开发测试环境切换

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

    指定激活配置文件
    在application.yml里面

    | spring:
    profiles:
    active: prod | | —- |

    意思就是使用application-prod.yml
    如果active是dev 就是使用application-dev.yml
    也可以active使用aaa 就是使用 application-aaa.yml

    其它激活方式
    1.命令行:
    java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar —spring.profiles.active=dev;
    可以直接在测试的时候,配置传入命令行参数
    2.虚拟机参数;
    -Dspring.profiles.active=dev




    同时也支持文档块儿的方式

    三个横杠是文档块儿的东西,


    server:
    port: 8081
    spring:
    profiles:
    active: prod

    —-
    server:
    port: 8083
    spring:
    profiles: dev

    —-

    server:
    port: 8084
    spring:
    profiles: prod #指定属于哪个环境



    (四)配置文件加载位置

    配置文件 - 图3 演示加载优先级代码


    Springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

    1. 项目文件夹下的 config 文件
    2. 项目文件夹下文件
    3. resources下的config文件夹
    4. resources下的文件

    优先级由高到底,高优先级的配置会覆盖低优先级的配置;
    SpringBoot会从这四个位置全部加载主配置文件;互补配置;



    我们还可以通过spring.config.location来改变默认的配置文件位置 项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;

    启动命令:
    java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar —spring.config.location=G:/application.properties — 就是读取电脑G盘的配置文件了(在运维的时候去使用很方便,比如线上环境忘了配置一些东西,可以直接用这种办法补上去, 这样的话所有配置文件的配置会同时生效)





    SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置

    1.命令行参数
    所有的配置都可以在命令行上进行指定
    java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar —server.port=8087 —server.context-path=/abc
    多个配置用空格分开; —配置项=值

    2.来自java:comp/env的JNDI属性

    3.Java系统属性(System.getProperties())

    4.操作系统环境变量

    5.RandomValuePropertySource配置的random.*属性值
    ==由jar包外向jar包内进行寻找;==
    ==优先加载带profile==

    6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件

    7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
    ==再来加载不带profile==

    8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件

    9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件

    10.@Configuration注解类上的@PropertySource

    11. 通过SpringApplication.setDefaultProperties指定的默认属性





    (五)读取Properties文件


    1.@PropertySource + @Value 
    2.@PropertySource 和 @ConfigurationProperties 

    参考:

    https://www.yuque.com/docs/share/c1a75a9f-0a31-4bee-8e29-acda9dbb229e?#

    1.value注解读取

    properties配置文件:

    # nginx配置的图片服务器的端口号

    nginx.pictureServer.port=8080

    # nginx配置的图片服务器的端口号

    nginx.pictureServer.path=D:\Download

    需要在SpringMVC 那里配置文件添加注解,如果在别的配置文件添加的话需要注意让它优先启动.(DispatcherServlet那里配置优先级)

    java代码

    @Value(“${nginx.pictureServer.port}”)

    private String nginxPictureServerPort;

    @Value(“${nginx.pictureServer.path}”)

    private String nginxPictureServerPath;