配置

  • 配置文件分类 以及优先级加载顺序
  • yaml
  • 读取配置文件内容
  • profile (环境切换 dev、test、pro)
  • @Profile
  • 内置配置加载顺序
  • 外部配置加载顺序

配置文件分类 以及优先级加载顺序

由于 SpringBoot 贯彻 约定大于配置的思想 ,所以很多的配置 都有默认值,如果我们想自定义去指定我们想要的配置,我们就可以创建自己的配置文件。

相同配置(比如server.name) 优先级加载顺序从上到下依次是。

  • 命令行参数: 最高优先级,覆盖所有其他设置。
  • 环境变量: 优先级次高。(一般不涉及)
  • application.properties 或 application.yaml 文件: 优先级较低,每次都会加载。
  • application-{profile}.properties 或 application-{profile}.yaml 文件: 仅在激活对应 profile 时加载。
  • @PropertySource 注解: 通过代码显式加载的外部配置文件。
  • 默认属性: 最低优先级。

配置文件后缀格式有2种,但是配置文件名 只有一个 application

  • application.properties (键值对形式)
  • application.yml 或者 application.yaml(yml格式)

两者简单对比

properties 内容
spring.port=8080

yml 格式
spring:
  port: 8080

配置文件命名不同会导致加载顺序不同

Spring Cloud 中bootstartp 加载顺序优先于application 但是SpringBoot不识别这个规则

示例: bootstartp.properties > application.properties

三种applicaiton.后缀 加载顺序

properties > yaml > yml

即:如果 properties 中存在的配置 在 yaml 或者 yml 配置文件也有 那么就会优先使用 properties中的配置;如果 properties中没有的配置,那么就会在yaml、yml中进行读取。

详解 YAML

yaml 是一个配置文件格式 是以数据为核心,比xml更加简洁

YAML、XML、 Proprerties 对比

  • Properties 不容易看出 层级关系
  • XML 写起来要写标签 麻烦
  • YAML 优点多多

YAML语法

  • 区分大小写
  • 数据值前必须有空格,作为分隔符
  • 使用缩进表示层级关系
  • 缩进不认Tab 只认空格 切记( IDEA 可以按Tab)
  • # 表示注释
  • 缩进空格数不重要,只要同层级别元素左侧对齐即可

YAML的数据格式

  • 对象 map:键值对集合
person:
 name: zhangsan
 age: 20

#行内写法
persion: {name: zhangsan,age: 20}
  • 数组

这里我要多描述一点:未来在使用配置中心的时候,假设本地配置文件配置了数据源 spring.datasource 有3个,但是在远程配置中心只有1个。要注意一个问题:这种场景只会走远程配置中心的数据源配置。因为在spring配置文件中。spring.datasource 对于这个配置 在本地文件、远程注册中心都有,所以根据注册中的原则:远程覆盖本地,所以就会导致本地的数据源的3个不会生效。

address:
 - beijing
 - shanghai

#行内写法
address: [beijing,shanghai]
  • 纯量
msg: 'hello \n world'  # 单引号 \n 不会被识别为换行,建议使用单引号
msg: "hello \n world"  # 双引号 \n 会被识别为换行

Yaml 参数引用

name: "zhangsan"

persion:
 name: ${name}  # 引用了 name 的值 zhangsan 了

读取配置文件的内容

配置文件的内容:一部分 会被Spring 自动识别,另一部分 不能自动获取,就需要我们自己手动获取了

我们获取文件值有3种方式

  • @Value
  • Environment
  • @ConfigurationProperties

案例1 @value

例如 当前Yml 中有

name: "zhangsan"

我们获取 就需要获取

import org.springframework.beans.factory.annotation.Value;

    // 如果配置文件没有name 就会报错:nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'name' in value "${name}"
    @Value("${name}")
    private String name;


    // 这里说一个事情 打死你都获取不了,static是干嘛的?优先加载,final是干嘛的,都会导致你无法获取值,切记,切记 不能加static 也不能加final 也不能同时加
    @Value("${name}")
    private static final String name1;

@Value关于数组处理:yml

persion:
 address: [beijing,shanghai]
@Value("${persion.address[0]}")
private static final String name1;  //beijing

常量跟对象是一样的,只是区分了'A \n B' ,"A \n B" 的单双引号区别

案例2 Environment获取变量

yml中有:

name: "zhangsan"
@Autowired
private Environment env;


//使用就是
String name = env.getProperties("name");

案例3 @ConfigurationProperties

yml 中有

name: "libai"

persion:
 name: "zhangsan"
 age: 18

创建一个Persion 类 加入 下面的红色 内容即可 下面没写 构造方法 ,使用前,请自行添加。

@Component  //声明这是个Bean
@ConfigurationProperties
@Data
public class Persion{
  private String name;
 // libai
  private int age;
  // 0
}
@Component  //声明这是个Bean
@ConfigurationProperties(prefix = "persion")  //可以选择括号内容 是否填写
@Data
public class Persion{
  private String name; // zhangsan
  private int age; // 18
}

讲解一下 prefix 即 前缀,将来赋值属性的时候 就会拼接上去 即找XXX的时候就会去找persion.XXX

终了

然后说明一个依赖 可以增加 yml 的提示功能

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

Profile 环境选择

profile 配置方式

  • 多profile文件
  • yml多文档方式

profile 激活使用 不激活 不会去使用

  • 配置文件
  • 虚拟机参数
  • 命令行参数

如果配置文件 没有被启用激活 在SpringBoot项目启动的时候,一般来说第二行就会出现

2021-02-06 09:45:55.709  INFO 22520 --- [           main] com.giant.shop1688application            : No active profile set, falling back to default profiles: default

简单的看信息 也能看出来,没有设置profile,回去使用默认的 profile

@Profile注解 选择某环境才去配置相关Bean

@Configuration  //配置类注解
@EnableWebSocket    //启动WebSocket服务
public class WebSocketConfig {
    @Bean
    @Profile({"dev", "test"}) // 尽在dev、test环境记载此Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

实验1:指定配置文件pro

在resources中配置 4个文件

文件1:application.properties

文件2:application-dev.properties 指定端口 8081

文件3:application-test.properties 指定端口 8082

文件4:application-pro.properties 指定端口 8083

方式1:在applicaiton.properties配置文件中使用

spring.profiles.actice=pro

方式2:JVM 参数

-Dspring.profiles.active=pro

运行后,项目启动端口是8083

注意一点。我们再application.properties制定的dev,如果application-dev.properties在执行的文件就不会生效了!

Banner设置

自己生成一个Banner还是比较炫酷的:http://patorjk.com/software/taag/

点击上图的Test All 就可以生成非常多的样式,有的格式不支持Test All。 找到自己喜欢的 复制到一个名为banner.txt 文件里

将banner.txt 拖至项目的 resources中 重启项目 spring默认即使用我们能banner!

如果想更变banner名称,需要在配置文件中加入,

#指定banner
spring.banner.charset=UTF-8
spring.banner.location=你指定的名称.txt

#如果放到其他位置,建议使用classpath 进而去找到你指定的文件位置即可!
spring.banner.location=classpath:banner.txt

Banner可以写的花里胡哨,比如:

${AnsiStyle.BOLD} 字体样式 BOLD
${AnsiStyle.FAINT} 字体样式 FAINT 翻译是弱小,但跟默认的差不多
${AnsiStyle.ITALIC} 字体样式 ITALIC 斜体
${AnsiStyle.NORMAL} 字体样式 NORMAL 标准
${AnsiStyle.UNDERLINE} 字体样式 UNDERLINE 强调(带有下划线)

${AnsiColor.BRIGHT_CYAN} 字体颜色:亮青色
${AnsiColor.BLACK} 字体颜色:黑色

${AnsiBackground.BRIGHT_GREEN} 背景颜色:鲜绿色
${AnsiBackground.BLUE} 背景颜色:蓝色
${AnsiBackground.BRIGHT_WHITE} 背景颜色:亮白


${AnsiBackground.BRIGHT_GREEN}      ________   __                           _____       _                     ____      ____  ____    ____    ______
${AnsiBackground.BRIGHT_GREEN}      |  __   _| [  |                         |_   _|     (_)                   |_  _|    |_  _||_   \  /   _| .' ____ \
${AnsiBackground.BRIGHT_GREEN}      |_/  / /    | |--.    .---.   _ .--.      | |       __    ,--.     .--.     \ \  /\  / /    |   \/   |   | (___ \_|
${AnsiBackground.BRIGHT_GREEN}         .'.' _   | .-. |  / /__\\ [ `.-. |     | |   _  [  |  `'_\ :  / .'`\ \    \ \/  \/ /     | |\  /| |    _.____`.
${AnsiBackground.BRIGHT_GREEN}       _/ /__/ |  | | | |  | \__.,  | | | |    _| |__/ |  | |  // | |, | \__. |     \  /\  /     _| |_\/_| |_  | \____) |
${AnsiBackground.BRIGHT_GREEN}      |________| [___]|__]  '.__.' [___||__]  |________| [___] \'-;__/  '.__.'       \/  \/     |_____||_____|  \______.'

${AnsiStyle.NORMAL} 这个非常重要,不恢复(使用Normal)的话,之前加入的AnsiBackground的位置会变形

枕聊WMS(Web Menagerment Server) 后台启动中...
This Project create in 2021-09-25..
SpringBoot Version is ${spring-boot.version}
Project port is ${server.port}
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤