SpringBoot配置文件相关

目录

properties和yml的区别

 properties的使用

  yml的使用

 yml配置对象


SpringBoot配置文件内容分为两类:

     1.Spring自带的配置,比如server.port(这玩意就自己躺在application.properties里)

     2.自定义的配置

配置文件的格式分为两种

     1.properties格式

     2.yml格式

properties和yml的区别

    1.通用性

properties是SpringBoot项目默认的配置文件!他已经很老了,只支持Java,yml是新的配置格式,它支持很多种种语言,如如: Java,C/C++, Ruby, Python, Perl, C#, PHP等

    2.简易性

先看properties 这


spring.datasource.url=
spring.datasource.username=
spring.datasource.password=

​

这三个参数spring.datasource重复写了三次,冗余!

再看这个yml 多简单!

spring:
  datasource:
    url: 
    username: 
    password: 

3.优先级

 properties比yml优先级高

 properties的使用

一、注册配置

直接在这个application.properties里面写!

server.port=8080

mykey=keyy!!

二、使用 

然后在demo目录下面创建一个类

package com.example.demo;

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

import javax.annotation.PostConstruct;

@Component
public class Read {
    @Value("${mykey}")
    private String key;
    @PostConstruct
    public void postConstruct(){
        System.out.println("success:"+key);
    }
}

 @Component是五大类注解 想用@Value注解就必须先使用五大类注解

@Value是要引入某个配置   这个格式一定要记住括号里面要用""包裹住${} 然后括号里面才是自己定义的key名(如果我想引用port的话 里面就要用@Value("${server.port}")     也就是说这个key的全名都要带上) 

然后用一个String接收这个内容 变量起啥名都可以

  yml的使用

在resources路径下面创建一个application.yml文件(和.properties并列)

(一定要叫这个名字才能识别!因为“约定大于配置”!!)

看刚才的例子(这回递归了)

 我们不用.来分级了而是像我们做文件的多级目录一样

spring:一级 datasource:二级 url username password 三级

现在我们直接开始使用yml

一、准备配置

我们在这个.yml文件中写入

server:
  port: 8090

mystr:
  str1: str1
  str2: str2
  str3: str3

 注意!注意!注意!这个:后面要加一个空格 不然后面的内容不会高亮(也不会识别)

二、使用

这个和之前.properties没有区别

package com.example.demo;

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

import javax.annotation.PostConstruct;

@Component
public class Read {
    @Value("${mystr.str1}")
    private String str1;
    @PostConstruct
    public void postConstruct(){
        System.out.println("success:"+str1);
    }
}

 两种配置都支持多种类型返回(需要对应类型变量接收),这里用yml举例

server:
  port: 8090

int:
  value: 18
float:
  value: 1.1
boolean:
  value: true
package com.example.demo;

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

import javax.annotation.PostConstruct;

@Component
public class Read {
    @Value("${int.value1}")
    private int intvalue;
    @Value("${float.value2}")
    private float floatvalue;
    @Value("${boolean.value3}")
    private boolean booleanvalue;
    @PostConstruct
    public void postConstruct(){
        System.out.println("int:"+intvalue);
        System.out.println("float:"+floatvalue);
        System.out.println("boolean:"+booleanvalue);
    }
}

还有一点就是 字符串默认是不加单 双引号的 如果加了双引号会使字符串里面的转义字符生效

单引号会使特殊字符变回正常字符

str.str1=helloworld!
str.str2="hello\nworld"!
package com.example.demo;

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

import javax.annotation.PostConstruct;

@Component
public class Read {
    @Value("${str.str1}")
    private String str1;
    @Value("${str.str2}")
    private String str2;
    @PostConstruct
    public void postConstruct(){
        System.out.println("str1:"+str1);
        System.out.println("str2:"+str2);
    }
}

 yml配置对象

有两种写法

student1:
  name: 张三
  age: 18

student2: {name: 李四,age: 20}

第一种是原始写法

第二种是行内写法 行内写法注意每个key-value之间用逗号分割 且:后面一定要有空格

对象的使用

@Component
@ConfigurationProperties(prefix="student1")
public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

对象的使用不能用@Value要用@ConfigurationProperties注解 后面的参数是key

注意一定要有setter方法才可以写入!!  (getter,tostring是我一键生成的....)

或者在这个位置加一个@Data注解 就等于写了Setter和getter方法了! 

yml配置集合

和类的配置大致相同

list:
  name:
    张三
    李四
    王五
package com.example.demo;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@ConfigurationProperties(prefix="list")
@Data
public class Student {
    private List<String> name;

    @Override
    public String toString() {
        return "Student{" +
                "name=" + name +
                '}';
    }
}

 唯一需要注意的是 

 这两个必须相同  其实仔细想想蛮好理解 list下面可以有多个二级  上面的prefix圈住一个list

那怎么确定是哪个二级呢?那就只能用变量名去确定了

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class Read {
    @Autowired
    Student student;
    @PostConstruct
    public void postConstruct(){
        System.out.println(student);
    }
}

おすすめ

転載: blog.csdn.net/chara9885/article/details/130627929