配置
- 配置文件分类 以及优先级加载顺序
- 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}
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
评论(0)