1.导入依赖(导入后配置文件有代码提示)

<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

如果配置文件乱码可以试试配置这个

springboot 如何将文件保存到客户机本地 springboot文件导入_spring

2.引入外部配置文件注入到容器组件(如bean的属性值绑定)

1.使用@ConfigurationProperties(prefix = “person”)
流程:1.在bean上标注@ConfigurationProperties(prefix = “person”)
2.将这个bean加入容器 即标注@component
3.在主配置文件编写对应属性的值

/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
 *
 * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
 *
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;

    private Map<String, Object> maps;
    private List<Object> lists;
    private Dog dog;

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public Person() {
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Integer getAge() {
        return age;
    }

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

    public Boolean getBoss() {
        return boss;
    }

    public void setBoss(Boolean boss) {
        this.boss = boss;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }

}
server:
  port: 8088

person:
  lastName: haha
  age: 18
  boss: true
  birth: 2077/03/24
  maps: {k1: value1,k2: 55,k3: 56}
  lists:
    - lisi
    - zhaoliu
  dog:
    name: 狗子
person.age=18
person.birth=1222/02/24
person.boss=true
person.last-name=华生
person.lists=a,b,c
person.maps.k1=22
person.maps.k2=33
person.dog.name=狗子

注入属性值的第二种方法:

public class Person {

    @Value("${person.lastName}")
    private String lastName;
    
    @value("#{2+8}")
    private Integer age;
    
    @value("false")
    private Boolean boss;
    
    private Date birth;
    private Map<String, Object> maps;
    private List<Object> lists;
    private Dog dog;

@value的使用在前面spring的注解版里面有说到 可以去看看不再赘述了

3.@Value获取值和@ConfigurationProperties获取值比较

@ConfigurationProperties

@Value

功能

批量注入配置文件中的属性

一个个指定

松散绑定(松散语法)

支持

不支持

SpEL

不支持

支持

JSR303数据校验

支持

不支持

复杂类型封装

支持

不支持

配置文件yml还是properties他们都能获取到值;

如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

4.配置文件注入值数据校验

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

   //lastName必须是邮箱格式
    @Email
    //@Value("${person.last-name}")
    private String lastName;

1.导入依赖(好像说springboot已经引用了,但是我的标红了导入就没了)
2.@Validated
3.@Email使用具体的注解校验规则

5.@PropertySource&@ImportResource

@PropertySource是spring的底层注解,用来引入外部配置文件,在配置类上标注,前面的spring注解版有说到
这里的作用是避免所有的配置都写在配置类里面,太过臃肿,所以你可以新建配置文件,通过这个注解标注在配置类上将配置文件注入容器。

@PropertySource(value = {"classpath:/person.properties"})
@Configuration
public class MyConfigValue {

    @Bean
    public Person myPerson(){
        return new Person();
    }
}
注入后使用就直接在bean上面通过@value获取 上面也有说到

@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效;

Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;

想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上

@ImportResource(locations = {"classpath:beans.xml"})
导入Spring的配置文件让其生效

但是springboot推荐使用配置类的方式而不推荐xml配置文件的方式

但是其实我很好奇,因为xml配置文件写sql写配置有一个优点就是解耦甚至说是项目运行时可以替换?应该可以吧 那全注解方式 耦合度不是更高了吗 为什么不建议使用xml呢 不应该两两结合吗

哪位大佬可以解释一下 评论区留言哦 谢谢

配置文件的占位符随机数等操作

person.last-name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15

张三${random.uuid}:张三拼接一个随机的uuid
${random.int}随机整数
${person.age:18}获取前面age的值 没有就使用默认值18
springboot 如何将文件保存到客户机本地 springboot文件导入_spring_02{person.hello}_dog