概述
文件种类
配置文件有三种
- application.properties
- application.yml (推荐使用)
- application.yaml
文件的优先级
当3种配置文件都在的时候,对某个功能的配置优先级
application.properties > application.yml > application.yaml
文件的书写方式
application.properties
serve.port=8080
application.yml :英文冒号后面必须空隔后接配置数据(port后面是空隔后接80端口数据),有层级是是用空隔隔开(不是tab,例如下面port前面是空隔不是tab)
server:
port: 80 #冒号后面必须空隔,前面也是空隔
subject:
- Java
- 前端
- 大数据
enterprise:
name: itcast
age: 16
subject:
- Java
- 前端
- 大数据
likes: [王者荣耀,刺激战场] #数组书写缩略格式
users: #对象数组格式一
- name: Tom
age: 4
- name: Jerry
age: 5
users: #对象数组格式二
-
name: Tom
age: 4
-
name: Jerry
age: 5
users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ] #对象数组缩略格式
application.yaml:使用上与.yml基本没有什么区别
server:
port: 80 #冒号后面必须空隔,前面也是空隔
自定义配置文件
(1)直接项目管理中配置
一般情况下,直接在resources文件夹下创建上述的3个文件都会自动识别为配置文件(文件名不能有错),我们也可自己命名,将它设置为配置文件
a. 创建一个自己命名的yml文件(其他两种也行),这处为myPro,yml
b. 进入项目结构(Project Structure)
c. 点击spring标志,圈起来的
d. 点击添加自定义配置文件
然后选择自己的配置文件,点击确认,应用,spring标志出来就可以了
(2)命令行配置
通过直接参数的直接写入
获取配置文件的信息
注意:这里使用的是yml的配置文件,其他的自己测哦,下面是自定义配置
lesson: SpringBoot
# 对象型
user:
id: 1
name: admin
password: 123456
#列表型
subject:
- JAVA
- C++
- JS
# subject: [JAVA,C++,JS] 和上面效果一样
读取单一数据
读取数据的形式${一级属性名.二级属性名……}
@Value("${lesson}")
private String lesson;
@Value("${user.id}")
private String userId;
@Value("${subject[1]}")
private String subject_01;
// SpringBoot
// 1
// C++
读取全部数据
数据封装到了Environment对象中,获取属性时,通过Environment的接口操作进行,具体方法时getProperties(String),参数填写属性名即可
// 读取全部的配置信息
@Autowired
private Environment env;
System.out.println(env.getProperty("lesson"));
System.out.println(env.getProperty("user.id"));
System.out.println(env.getProperty("subject[0]"));
// 结果
SpringBoot
1
JAVA
读取数据对象
创建配置对象类,这里创建user的配置类
user:
id: 1
name: admin
password: 123456
@Component
// prefix是前缀user,对应上面 形式=>一级属性名.二级属性名
@ConfigurationProperties(prefix = "user")
public class UserProperties {
private int id;
private String name;
private String password;
}
可能需要引入坐标(ConfigurationProperties)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
使用配置对象
@Autowired
private UserProperties userProperties;
System.out.println(userProperties.getId());
System.out.println(userProperties.getName());
System.out.println(userProperties.getPassword());
yml文件中数据相互引用
center:
dataDir: D:/usr/local/fire/data
tmpDir: D:/usr/local/fire/tmp
logDir: D:/usr/local/fire/log
msgDir: D:/usr/local/fire/msgDir
直接通过${一级属性名.二级属性名……}
baseDir: /usr/local/fire
center:
dataDir: ${baseDir}/data
tmpDir: ${baseDir}/tmp
logDir: ${baseDir}/log
msgDir: ${baseDir}/msgDir
设置临时属性
说明:配置文件编写好后,可能会有暂时的配置信息的改动这时我们需要设置临时配置信息
启动时添加对应的参数,多个属性用空格隔开
java –jar springboot.jar –-server.port=80 --logging.level.root=debug
多环境开发问题
(1)单一文件
这种比较少见
spring:
profiles:
active: pro # 启动pro
---
spring:
profiles: pro
server:
port: 80
---
spring:
profiles: dev
server:
port: 81
(2)多文件开发yml
命名规则application-环境名.yml,properties版本和这个就是写法不一样,在这里就不写了
主配置文件application.yml
spring:
profiles:
active: pro # 启动pro
开发环境配置文件application-dev.yaml
server:
port: 80
生产环境配置文件application-pro.yaml
server:
port: 81
测试环境配置文件application-test.yaml
server:
port: 82
(3)独立配置文件
为了方便进一步管理,可以在进行细化
主配置文件application.yml
spring:
profiles:
active: dev
group:
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
"test": testDB,testRedis,testMVC
下面创建其他的配置文件名,在同一文件夹下
application-dev.yaml
application-devDB.yaml
application-devRedis.yaml
application-devMVC.yaml
application-pro.yaml
application-proDB.yaml
application-proRedis.yaml
application-proMVC.yaml
application-test.yaml
application-testDB.yaml
application-testRedis.yaml
application-testMVC.yaml
文件的级别
配置文件的的级别
- 类路径下配置文件(一直使用的是这个,也就是resources目录中的application.yml文件)
- 类路径下config目录下配置文件
- 程序包所在目录中配置文件
- 程序包所在目录中config目录下配置文件
优先级
1. file :config/application.yml 【最高】
2. file :application.yml
3. classpath:config/application.yml
4. classpath:application.yml 【最低】
位置
classpath:程序包所在目录中配置文件的位置分布
file:类路径下,打包以后只要和jar包处于这种形式的文件结构,config里面的配置文件级别比外面的高,但都比项目里的配置文件优先级高