文章目录
1、配置文件分类
SpringBoot提供了3种配置文件的格式
- application.properties(传统格式/默认格式)
server.port=81
- application.yml(主流格式)
server:
port: 82
- application.yaml
server:
port: 83
yml格式和yaml格式除了文件名后缀不一样,格式完全一样
临时属性设置
- SpringBoot提供了灵活的配置方式,如果你发现你的项目中有个别属性需要重新配置
- 可以使用临时属性的方式快速修改某些配置。方法也特别简单,在启动的时候添加上对应参数就可以了
- 使用jar命令启动SpringBoot工程时可以使用临时属性替换配置文件中的属性
- 在命令输入完毕后,空一格,然后输入两个-号,当属性存在多级名称时,中间使用点分隔,和properties文件中的属性格式完全相同
- 临时属性添加方式:java –jar 工程名.jar –-属性名=值
java –jar springboot.jar --server.port=80 --logging.level.root=debug
- 临时属性的加载优先级要高于配置文件的
- idea中Program arguments对应的位置就是添加临时属性的
- 查看启动类的agrs参数
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
System.out.println(Arrays.toString(args));
SpringApplication.run(SpringbootApplication.class, args);
}
}
输出结果:
[--server.port=80, --logging.level.root=debug]
2、配置文件优先级
优先级从高到低,高优先级的配置覆盖低优先级配置
SpringBoot3种配置文件不同版本优先级
- 如果是2.4.0之前版本:application.properties > application.yml > application.yaml(properties最后加载)
- 如果是2.4.0及以后版本:application.yaml> application.yml > application.properties
- 不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留
配置文件不同位置优先级
- classpath:application.yml (resources目录) 【最低】
- classpath:config/application.yml
- file :application.yml
- file :config/application.yml(jar包所在目录下config目录) 【最高】
使用场景
- 项目类路径配置文件:服务于开发人员本机开发与测试
- 项目类路径config目录中配置文件:服务于项目经理整体调控
- 工程路径配置文件:服务于运维人员配置涉密线上环境
- 工程路径config目录中配置文件:服务于运维经理整体调控
3、自定义配置文件
- 方式一:****使用临时属性设置配置文件名,注意仅仅是名称,不要带扩展名
--spring.config.name=myApplication
- 方式一:****使用临时属性设置配置文件路径或类路径,全路径名
--spring.config.location=classpath:/myApplication.yml
4、yml格式文件
- 大小写敏感
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
- 如果想要识别转义字符,则需要加双引号
- #号 表示注释
下面列出常见的数据书写格式,熟悉一下:
boolean: TRUE #TRUE,true,True,FALSE,false,False均可
float: 3.14 #6.8523015e+5 #支持科学计数法
int: 123 #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
null: ~ #使用~表示null
string: HelloWorld #字符串可以直接书写
string2: "Hello World" #可以使用双引号包裹特殊字符
date: 2018-02-17 #日期必须使用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00 #时间和日期之间使用T连接,最后使用+代表时区
yml格式表示简单数组:
#数组格式一
subject:
- Java
- 前端
- 大数据
enterprise:
name: itcast
age: 16
subject:
- Java
- 前端
- 大数据
#数组格式二
likes: [王者荣耀,刺激战场]
yml格式表示对象数组:
#对象数组格式一
users1:
- name: Tom
age: 4
- name: Jerry
age: 5
#对象数组格式二
users2:
-
name: Tom
age: 4
-
name: Jerry
age: 5
##对象数组缩略格式
users3: [ { name: Tom , age: 4 } , { name: Jerry , age: 5 } ]
yaml格式表示Map键值对:
#方式一
person2:
map:
k1: v1
k2: v2
#方式二
person2:
map: {k1: v1,k2: v2}
5、yml数据读取
读取单一数据
使用 @Value 可以读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
@RestController
public class ReadConfigFile {
@Value("${server.port}")
private String myPort;
@RequestMapping("/getValue")
public String getValue(){
System.out.println(myPort);//8080
return "success";
}
}
读取对象数据
- 使用 @ConfigurationProperties注解绑定配置信息到封装类中
- 封装类需要定义为Spring管理的bean,否则无法进行属性注入
yml:
person:
name: zhang3
age: 30
pets:
- type: dog
age: 1
- type: cat
age: 2
mymap:
mykey1: value1
mykey2: value2
属性注入的实体:
@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private List<Pets> pets;//宠物
private Map<String,String> mymap;
}
@Data
class Pets {
private String type;
private Integer age;
}
添加此依赖,yml属性可以提示@ConfigurationProperties对应的实体的字段属性
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
代码使用
@RestController
public class ReadConfigFile {
@Autowired
private Person person;
@RequestMapping("/getValue")
public String getValue(){
System.out.println(person);
return "success";
}
}
输出结果:
Person(name=zhang3, age=30, pets=[Pets(type=dog, age=1), Pets(type=cat, age=2)], mymap={mykey1=value1, mykey2=value2})
6、多环境开发
6.1、yml单一文件版
spring:
profiles:
active: pro #激活环境
---
spring:
profiles: pro
server:
port: 80
---
spring:
profiles: dev
server:
port: 81
---
spring:
profiles: test
server:
port: 82
其中关于环境名称定义上述格式是过时格式,标准格式如下
spring:
config:
activate:
on-profile: pro
总结
- 多环境开发需要设置若干种常用环境,例如开发、生产、测试环境
- yaml格式中设置多环境使用—区分环境设置边界
- 每种环境的区别在于加载的配置属性不同
- 启用某种环境时需要指定启动时使用该环境
6.2、yml多文件版
application.yml 主配置文件
spring:
profiles:
active: pro #激活pro环境
#其他公共属性
...
application-pro.yml 生产环境配置文件
server:
port: 81
application-dev.yml 开发环境配置文件
server:
port: 82
总结
- 文件的命名规则为:application-环境名.yml
- 主配置文件中设置公共配置(全局)
- 环境分类配置文件中常用于设置冲突属性(局部)
- 主配置文件属性和环境分类配置文件属性冲突,后者优先级高
6.3、yml独立配置多文件版
将所有的配置根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下
- application-devDB.yml
- application-devRedis.yml
- application-devMVC.yml
SpringBoot2.4.0以前版本
使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
spring:
profiles:
active: dev
include: devDB,devRedis,devMVC
- 现在相当于加载dev配置时,再加载对应的3组配置
- 当主环境dev与其他环境有相同属性时,主环境属性生效
- 其他环境中有相同属性时,最后加载的环境属性生效
- 如下:dev最后dev
SpringBoot2.4.0及以后版本
比如我要切换dev环境为pro时,include也要修改。因为include属性只能使用一次。SpringBoot从2.4版开始使用group属性替代include属性,降低了配置书写量
spring:
profiles:
active: dev
group:
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
"test": testDB,testRedis,testMVC
- 环境中有相同属性时,最后加载的环境属性生效
- 如下:dev在第一位,相同属性会被覆盖
6.4、多环境开发Maven控制
maven中设置多环境(使用属性方式区分环境)
<profiles>
<profile>
<id>env_dev</id>
<properties>
<profile.active>dev</profile.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault> <!--默认启动环境-->
</activation>
</profile>
<profile>
<id>env_pro</id>
<properties>
<profile.active>pro</profile.active>
</properties>
</profile>
</profiles>
SpringBoot中读取maven设置值:@属性名@就是读取maven中配置的属性值的语法格式
spring:
profiles:
active: @profile.active@
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/148608.html