SpringBoot基本配置和yaml、yml详解

springboot整合了市面上大部分热门框架的配置文件,并为其设置了默认值,若不想用默认配置,只需要在springboot核心配置文件application.properties中直接修改即可

进行属性配置

springboot的核心配置文件通过键值对配置对应属性,例如

  • 将服务器端口改为8888
server.port=8888

其他配置详见官方文档

属性文件的格式

除了.properties格式还有其他两种格式的配置文件可用,分别是.yml.yaml,官方推荐使用.yml,.yml.yaml格式文件的写法是一样的。写法如下:

server:
  port: 80

当三种配置文件格式共存时,加载优先级.properties>.yml>.yaml,且共存叠加

.yaml.yml语法规则

  • 大小写敏感
  • 属性层级关系用多行描述,每行结尾用冒号结束
  • 使用缩进表示层级关系,同层级左侧对其,只允许使用空格(不允许使用Tab键)
  • 属性前面添加空格(属性名与属性值之间使用冒号+空格作为分割)
  • #表示注解
  • **核心规则:**数据前面要用空格和冒号隔开

示例:

user是对象的表示格式,hobby是数组的表示格式,hobby2是数组的缩略格式,users为对象数组的表示格式,user1是对象数组的缩略格式。

country: china
province: zhejiang
city: hangzhou

user:
  name: zhangsan
  age: 15
  
hobby: 
  - game
  - music
  - sleep
  - ping-pang

hobby2: [game,music,sleep,mpingpang]

users:
  - name: zhangsan
    age: 15
  - name: lisi
    age: 14
  - name: wangwu
    age: 13

users1: [{name: zhangsan,age: 15},{name: lisi,age: 14},{name: wangwu,age: 13}]

.yaml.yml文件数据读取

读取单个数据

  • 使用@Value读取
  • 属性名引用方式,使用el表达式:${一级属性名.二级属性名…},数组用[]
/**
 * 读取yaml或yml数据中的单一数据
 * @return
 */
@Value("${country}")
private String country;

@Value("${user.username}")
private String name;

@Value("${hobby[1]}")
private String hobby1;

读取全部数据

  • 使用springboot的自动装配注解@Autowired
  • 用一个Enviroment类型数据装
  • 使用时用Enviroment.getProperty(属性名)方法取该属性名的值
/**
 * 读取yaml或yml数据中的全部数据
 */
@Autowired
private Environment env;

@GetMapping
public String getById(){
    System.out.println(env.getProperty("country"));
    return "springboot is running3...";
}

读取数据并封装到对象中

  • 创建类,用于封装下面的数据
@Component
@ConfigurationProperties("datasource")
public class MyDataSource {
    private String driver;
    private String url;
    private String username;
    private String password;
    //getter、setter、toString
}
  • 由spring帮我们加载数据到对象中,一定要告诉spring加载这组信息
@ConfigurationProperties("datasource")

就是这个注解

  • 使用时直接从spring中获取信息使用
    自动装配
@Autowired
private MyDataSource myDataSource;

.yaml.yml文件的变量引用

  • 同样是使用el表达式${一级属性名.二级属性名…}
  • 使用双引号包裹的字符串,会使转义字符生效
baseDir: c:\win10

#使用${属性名}引用
tempDir1: ${baseDir}\temp

#使用双引号包裹的字符串,会使转义字符生效
tempDir2: "${baseDir}\temp"